{"version":3,"file":"tableau-ui-angular-table.mjs","sources":["../../../projects/component-library/table/src/defs/cell-def/cell-def.directive.ts","../../../projects/component-library/table/src/defs/header-def/header-def.directive.ts","../../../projects/component-library/table/src/defs/header-def/header-toolip-def.directive.ts","../../../projects/component-library/table/src/defs/cell-def/cell-toolip-def.directive.ts","../../../projects/component-library/table/src/defs/column-def/column-def.directive.ts","../../../projects/component-library/table/src/column-widths/col-rendered-width.directive.ts","../../../projects/component-library/table/src/data/data-block.ts","../../../projects/component-library/table/src/data/data-options.ts","../../../projects/component-library/table/src/data/data-manager.ts","../../../projects/component-library/table/src/selection/selection-options.ts","../../../projects/component-library/table/src/column-widths/resizer.directive.ts","../../../projects/component-library/table/src/defs/header-def/header-tooltip.pipe.ts","../../../projects/component-library/table/src/defs/header-def/header-context.pipe.ts","../../../projects/component-library/table/src/defs/header-def/header-class.pipe.ts","../../../projects/component-library/table/src/defs/cell-def/cell-context.pipe.ts","../../../projects/component-library/table/src/defs/cell-def/cell-class.pipe.ts","../../../projects/component-library/table/src/defs/cell-def/cell-tooltip.pipe.ts","../../../projects/component-library/table/src/sorting/sort-info-pipe.ts","../../../projects/component-library/table/src/column-widths/col-width.pipe.ts","../../../projects/component-library/table/src/column-widths/cell-width.pipe.ts","../../../projects/component-library/table/src/selection/header-checkbox-mode.pipe.ts","../../../projects/component-library/table/src/selection/row-selected.pipe.ts","../../../projects/component-library/table/src/table.component.ts","../../../projects/component-library/table/src/table.component.html","../../../projects/component-library/table/src/tableau-ui-table.module.ts","../../../projects/component-library/table/src/tableau-ui-angular-table.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport type { CellContext } from './cell-context';\nimport type { TableComponent } from '../../table.component';\n\n@Directive({\n  selector: '[tabCellDef]',\n  standalone: false,\n})\nexport class CellDefDirective<TData> {\n  readonly table = input.required<TableComponent<TData>>({\n    alias: 'tabCellDef',\n  });\n  /**\n   * When true, it will clamp the text content in the template to fit the cell height.\n   * It will add an ellipsis (...) to the end of the text if it overflows.\n   * This is useful for preventing overflow in table cells.\n   * This will clamp to the maximum number of lines that can fit in the cell, respecting the height and padding of the cell.\n   * It will also show a default tooltip with the full value of the cell uinless its turned off.\n   * Only works if the cell template ONLY contains text, no HTML elements.\n   * @default true\n   */\n  readonly $textClamping = input<boolean>(true, {\n    alias: 'textClamping',\n  });\n\n  public templateRef = inject<TemplateRef<{ $implicit: CellContext<TData> }>>(TemplateRef<{ $implicit: CellContext<TData> }>);\n\n  static ngTemplateContextGuard<TData>(dir: CellDefDirective<TData>, ctx: unknown): ctx is { $implicit: CellContext<TData> } {\n    return true;\n  }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport type { HeaderContext } from './header-context';\nimport type { TableComponent } from '../../table.component';\n\n@Directive({\n  selector: '[tabHeaderDef]',\n  standalone: false,\n})\nexport class HeaderDefDirective<TData> {\n  readonly table = input.required<TableComponent<TData>>({\n    alias: 'tabHeaderDef',\n  });\n\n  public templateRef = inject<TemplateRef<{ $implicit: HeaderContext<TData> }>>(TemplateRef<{ $implicit: HeaderContext<TData> }>);\n\n  static ngTemplateContextGuard<TData>(dir: HeaderDefDirective<TData>, ctx: unknown): ctx is { $implicit: HeaderContext<TData> } {\n    return true;\n  }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport type { TableComponent } from '../../table.component';\nimport type { HeaderContext, HeaderTooltipContext } from './header-context';\n\n@Directive({\n  selector: '[tabHeaderTooltipDef]',\n  standalone: false,\n})\nexport class HeaderToolipDefDirective<TData> {\n  readonly table = input.required<TableComponent<TData>>({\n    alias: 'tabHeaderTooltipDef',\n  });\n\n  readonly $showTooltip = input<boolean | ((ctx: HeaderContext<TData>) => boolean)>(true, {\n    alias: 'showTooltip',\n  });\n\n  readonly $tooltipPosition = input<'bottom' | 'left' | 'right' | 'top'>('top', {\n    alias: 'tooltipPosition',\n  });\n  readonly $tooltipMargin = input<string>('0px', {\n    alias: 'tooltipMargin',\n  });\n\n  public templateRef = inject(TemplateRef<{ $implicit: HeaderTooltipContext<TData> }>);\n\n  static ngTemplateContextGuard<TData>(dir: HeaderToolipDefDirective<TData>, ctx: unknown): ctx is { $implicit: HeaderTooltipContext<TData> } {\n    return true;\n  }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport type { TableComponent } from '../../table.component';\nimport type { CellContext, CellTooltipContext } from './cell-context';\n\n@Directive({\n  selector: '[tabCellTooltipDef]',\n  standalone: false,\n})\nexport class CellToolipDefDirective<TData> {\n  readonly table = input.required<TableComponent<TData>>({\n    alias: 'tabCellTooltipDef',\n  });\n\n  readonly $showTooltip = input<boolean | ((ctx: CellContext<TData>, isClamped: boolean) => boolean)>(true, {\n    alias: 'showTooltip',\n  });\n\n  readonly $tooltipPosition = input<'bottom' | 'left' | 'right' | 'top'>('bottom', {\n    alias: 'tooltipPosition',\n  });\n  readonly $tooltipMargin = input<string>('0px', {\n    alias: 'tooltipMargin',\n  });\n\n  readonly templateRef = inject(TemplateRef<{ $implicit: CellTooltipContext<TData> }>);\n\n  static ngTemplateContextGuard<TData>(dir: CellToolipDefDirective<TData>, ctx: unknown): ctx is { $implicit: CellTooltipContext<TData> } {\n    return true;\n  }\n}\n","import type { InputSignal, TemplateRef } from '@angular/core';\nimport { contentChild, Directive, input } from '@angular/core';\nimport { CellDefDirective } from '../cell-def/cell-def.directive';\nimport { HeaderDefDirective } from '../header-def/header-def.directive';\nimport type { HeaderContext } from '../header-def/header-context';\nimport type { CellContext } from '../cell-def/cell-context';\nimport type { DataSort } from '../../sorting/data-sort';\nimport { HeaderToolipDefDirective } from '../header-def/header-toolip-def.directive';\nimport { CellToolipDefDirective } from '../cell-def/cell-toolip-def.directive';\n\n@Directive({\n  selector: '[tabColumnDef]',\n  standalone: false,\n})\nexport class ColumnDefDirective<TData> {\n  /**\n   * The unique identifier for the column.\n   */\n  readonly $id = input.required<string>({\n    alias: 'tabColumnDef',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The property name of the column, used for sorting purposes.\n   * If not provided, it will default to the column ID.\n   * @default undefined\n   */\n  readonly $propertyName: InputSignal<string | undefined> = input<string | undefined>(undefined, {\n    alias: 'propertyName',\n  });\n\n  /**\n   * The CSS width of the column.\n   * Can be a string representing a CSS value (e.g., '100px', '20%', '1rem') or a number repesenting flex-grow (fill space).\n   * @default \"1\"\n   */\n  readonly $width = input<number | string>(1, {\n    alias: 'width',\n  });\n\n  /**\n   * The CSS minimum width of the column.\n   * Can be a string representing a CSS value (e.g., '100px', '20%', '1rem'). If no unit is provided, it will be treated as pixels.\n   * @default \"100px\"\n   */\n  readonly $minWidth = input<string>('5rem', {\n    alias: 'minWidth',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The CSS maximum width of the column.\n   * Can be a string representing a CSS value (e.g., '100px', '20%', '1rem'). If no unit is provided, it will be treated as pixels.\n   * If undefined, there is no maximum width.\n   * @default undefined\n   */\n  readonly $maxWidth: InputSignal<string | undefined> = input<string | undefined>(undefined, {\n    alias: 'maxWidth',\n  });\n\n  /**\n   * Whether the column is resizable by the user.\n   * @default true\n   */\n  readonly $resizable = input<boolean>(true, {\n    alias: 'resizable',\n  });\n\n  /**\n   * Whether the column is sortable by the user.\n   * @default true\n   */\n  readonly $sortable = input<boolean>(true, {\n    alias: 'sortable',\n  });\n\n  /**\n   * The sort order of the column when it is sorted.\n   * Can be 'asc' for ascending, 'desc' for descending, or an array of two values to indicate the order of sorting.\n   * @default \"['asc', 'desc']\"\n   */\n  readonly $sortOrder = input<SortOrderPair>(['asc', 'desc'], {\n    alias: 'sortOrder',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The CSS class to apply to the column header.\n   * Can be a string or a function that returns a string based on the header context.\n   * If undefined, no class will be applied.\n   * @default undefined\n   */\n  readonly $headerClass: InputSignal<string | ((ctx: HeaderContext<TData>) => string | undefined) | undefined> = input<string | ((ctx: HeaderContext<TData>) => string | undefined) | undefined>(\n    undefined,\n    {\n      alias: 'headerClass',\n    },\n  );\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The CSS class to apply to the column cells.\n   * Can be a string or a function that returns a string based on the cell context.\n   * If undefined, no class will be applied.\n   * @default undefined\n   */\n  readonly $cellClass: InputSignal<string | ((ctx: CellContext<TData>) => string | undefined) | undefined> = input<string | ((ctx: CellContext<TData>) => string | undefined) | undefined>(undefined, {\n    alias: 'cellClass',\n  });\n\n  /**\n   * Show automatic header tooltip when no tabHeaderTooltipDef is provided on the column.\n   * @default true\n   */\n  readonly $showAutoHeaderTooltip = input<boolean>(true, {\n    alias: 'showAutoHeaderTooltip',\n  });\n\n  /**\n   * Show automatic cell tooltip when no tabCellTooltipDef is provided on the column.\n   * The auto cell tooltip displays the column value when it's clipped. Only works for tabCellDefs with $textClipping() enabled.\n   * If the cell value is not clipped, no automatic tooltip will be shown.\n   * When a tabCellTooltipDef overrides the automatic tooltip, this setting has no effect.\n   * @default true\n   */\n  readonly $showAutoCellTooltip = input<boolean>(true, {\n    alias: 'showAutoCellTooltip',\n  });\n\n  readonly $cell = contentChild.required<CellDefDirective<TData>>(CellDefDirective);\n  readonly $header = contentChild<HeaderDefDirective<TData>>(HeaderDefDirective);\n\n  readonly $headerTooltip = contentChild<HeaderToolipDefDirective<TData>>(HeaderToolipDefDirective);\n\n  readonly $cellTooltip = contentChild<CellToolipDefDirective<TData>>(CellToolipDefDirective);\n\n  public buildHeaderContext(index: number, first: boolean, last: boolean, even: boolean, odd: boolean, count: number): HeaderContext<TData> {\n    return {\n      columnDef: this,\n      meta: {\n        index,\n        first,\n        last,\n        even,\n        odd,\n        count,\n      },\n    };\n  }\n  public buildCellContext(\n    value: TData,\n    maxRowCount: number,\n    index: number,\n    first: boolean,\n    last: boolean,\n    even: boolean,\n    odd: boolean,\n    count: number,\n    columnIndex: number,\n    columnFirst: boolean,\n    columnLast: boolean,\n    columnEven: boolean,\n    columnOdd: boolean,\n    columnCount: number,\n  ): CellContext<TData> {\n    return {\n      row: value,\n      meta: {\n        columnDef: this,\n        index: index,\n        first: first,\n        last: last,\n        even: even,\n        odd: odd,\n        count: count,\n        columnIndex: columnIndex,\n        columnFirst: columnFirst,\n        columnLast: columnLast,\n        columnEven: columnEven,\n        columnOdd: columnOdd,\n        columnCount: columnCount,\n      },\n      maxRowCount,\n    };\n  }\n}\nexport type SortOrderPair = ['asc', 'desc'] | ['desc', 'asc'];\nexport interface HeaderTooltipArgs<TData> {\n  ctx: HeaderContext<TData>;\n  template: TemplateRef<HeaderContext<TData>>;\n  sortMode: 'multi' | 'single';\n  sortable: boolean;\n  sortOrder: SortOrderPair;\n  currentSort: { info: DataSort; index: number } | undefined;\n  allSorts: DataSort[];\n}\nexport interface CellTooltipArgs<TData> {\n  ctx: CellContext<TData>;\n  template: TemplateRef<CellContext<TData>>;\n}\n","import type { AfterViewInit, OnDestroy } from '@angular/core';\nimport { Directive, ElementRef, inject, input } from '@angular/core';\nimport type { Observable } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\n@Directive({\n  selector: '[colRenderedWidth]',\n  standalone: false,\n})\nexport class ColRenderedWidthDirective implements OnDestroy, AfterViewInit {\n  readonly columnId = input.required<string>({\n    alias: 'colRenderedWidth',\n  });\n  private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private readonly _renderedWidth = new BehaviorSubject<number>(0);\n  public get renderedWidth(): Observable<number> {\n    return this._renderedWidth;\n  }\n\n  private observer: ResizeObserver | undefined;\n  public get isObserving() {\n    return this.observer !== undefined;\n  }\n  ngAfterViewInit(): void {\n    this.observer = new ResizeObserver(() => {\n      const width = +getComputedStyle(this.element.nativeElement).width.replace('px', '');\n      this._renderedWidth.next(width);\n    });\n    this.observer.observe(this.element.nativeElement);\n  }\n\n  ngOnDestroy(): void {\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = undefined;\n    }\n  }\n}\n","import type { Signal } from '@angular/core';\nimport { computed, signal } from '@angular/core';\nimport type { Primitive } from 'tableau-ui-angular/types';\n\nexport class DataBlock<TData> {\n  private readonly $_status = signal<'canceled' | 'error' | 'loading' | 'success'>('loading');\n  public get $status(): Signal<'canceled' | 'error' | 'loading' | 'success'> {\n    return this.$_status;\n  }\n  private readonly $response = signal<{ key: Primitive; data: TData }[]>([]);\n  public readonly $data = computed(() => {\n    const status = this.$status();\n    const response = this.$response();\n    if (status === 'success') {\n      return response;\n    } else {\n      const row: Record<string, unknown> = {};\n      return Array.from({ length: Number.isFinite(this.blockRowCount) ? this.blockRowCount : 0 }, (_, a) => ({\n        key: a,\n        data: row as TData,\n      }));\n    }\n  });\n  public get offset() {\n    return this.id * this.blockRowCount;\n  }\n  constructor(\n    public readonly id: number,\n    public readonly abort: AbortController | undefined,\n    private readonly blockRowCount: number,\n    private readonly getKey: (data: TData) => Primitive,\n    public readonly dataPromise: Promise<{ key: Primitive; data: TData }[]>,\n  ) {\n    this.dataPromise\n      .then(data => {\n        this.$response.set(data);\n        this.$_status.set('success');\n      })\n      .catch((error: unknown) => {\n        if (this.abort?.signal.aborted === true) {\n          this.$_status.set('canceled');\n          return;\n        }\n        this.$_status.set('error');\n        console.error('Error loading data block:', error);\n\n        throw error;\n      });\n  }\n}\n","import type { Primitive } from 'tableau-ui-angular/types';\nimport type { FullDataRequest, IncrementalDataRequest } from './data-request';\nimport type { FullDataResponse, IncrementalDataResponse } from './data-response';\n\nclass BaseDataOptions<TData> {\n  constructor(public readonly getRowKey: (row: TData) => Primitive) {}\n}\n\nexport class IncrementalDataOptions<TData> extends BaseDataOptions<TData> {\n  constructor(\n    getRowKey: (row: TData) => Primitive,\n    public readonly getDataBlock: (req: IncrementalDataRequest) => Promise<IncrementalDataResponse<TData>>,\n  ) {\n    super(getRowKey);\n  }\n}\nexport class FullDataOptions<TData> extends BaseDataOptions<TData> {\n  constructor(\n    getRowKey: (row: TData) => Primitive,\n    public readonly getAllData: (req: FullDataRequest) => Promise<FullDataResponse<TData>>,\n  ) {\n    super(getRowKey);\n  }\n}\n\nexport type DataOptions<TData> = IncrementalDataOptions<TData> | FullDataOptions<TData>;\n","import type { ChangeDetectorRef, Signal } from '@angular/core';\nimport { signal } from '@angular/core';\nimport type { DataSort } from '../sorting/data-sort';\nimport { DataBlock } from './data-block';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport type { DataOptions } from './data-options';\nimport { FullDataOptions, IncrementalDataOptions } from './data-options';\n\nexport class DataManager<TData> {\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n  private dataRowHeightPx: number = 0;\n  private dataWindowHeightPx: number = 0;\n  private sort: DataSort[] = [];\n  private dataBlockWindow: number = 0;\n  private dataBlockHeightPx: number = 0;\n  private blockRowCount: number = 0;\n  private _totalRowCount = 0;\n  public get totalRowCount() {\n    return this._totalRowCount;\n  }\n  private dataOptions: DataOptions<TData> | undefined = undefined;\n  private readonly $_blocks = signal<BlocksInfo<TData>>({\n    prePixels: 0,\n    blocks: [],\n    postPixels: 0,\n  });\n  get $blocks(): Signal<BlocksInfo<TData>> {\n    return this.$_blocks;\n  }\n\n  private _allDataInfo: AllDataInfo<TData> | undefined = undefined;\n  get allDataInfo(): AllDataInfo<TData> | undefined {\n    return this._allDataInfo;\n  }\n  private resetting = false;\n  public async reset(dataWindowHeightPx: number, dataRowHeightPx: number, sort: DataSort[], dataBlockWindow: number, dataOptions: DataOptions<TData>) {\n    this.resetting = true;\n    this.dataOptions = dataOptions;\n    this.dataRowHeightPx = dataRowHeightPx;\n    this.dataWindowHeightPx = dataWindowHeightPx;\n    this.sort = sort;\n    this.dataBlockWindow = dataBlockWindow;\n    this.blockRowCount = Math.floor(dataWindowHeightPx / dataRowHeightPx);\n    this.dataBlockHeightPx = dataRowHeightPx * this.blockRowCount;\n    this._totalRowCount = 0;\n\n    if (this._allDataInfo) {\n      this._allDataInfo.abort.abort();\n      this._allDataInfo = undefined;\n    }\n\n    if (!Number.isFinite(this.blockRowCount) || this.blockRowCount <= 0) {\n      this.$_blocks.set({\n        prePixels: 0,\n        blocks: [],\n        postPixels: 0,\n      });\n      this.resetting = false;\n      return;\n    }\n\n    let initialBlock: DataBlock<TData> | undefined = undefined;\n    if (this.dataOptions instanceof IncrementalDataOptions) {\n      initialBlock = this.getBlock(0);\n    } else if (this.dataOptions instanceof FullDataOptions) {\n      const allDataAbort = new AbortController();\n      let allDataPromise: Promise<{ key: Primitive; data: TData }[]>;\n\n      if (!Number.isFinite(this.blockRowCount)) {\n        allDataPromise = Promise.resolve([]);\n      } else {\n        allDataPromise = this.dataOptions\n          .getAllData({\n            sort: sort,\n            abort: allDataAbort.signal,\n          })\n          .then(response => {\n            this._totalRowCount = response.data.length;\n            return response.data.map(row => ({\n              key: this.dataOptions!.getRowKey(row),\n              data: row,\n            }));\n          });\n      }\n      this._allDataInfo = new AllDataInfo<TData>(allDataPromise, allDataAbort);\n      initialBlock = this.getBlock(0);\n    } else {\n      this.resetting = false;\n      throw new Error('Unsupported data options type');\n    }\n\n    // load initial block\n    this.$_blocks.update(blocks => {\n      // Clear existing blocks\n      blocks.blocks.forEach(block => {\n        block.abort?.abort();\n      });\n      return {\n        prePixels: 0,\n        blocks: [initialBlock],\n        postPixels: 0,\n      };\n    });\n    this.cdr.markForCheck();\n\n    try {\n      await initialBlock.dataPromise;\n      this.cdr.markForCheck();\n      this.resetting = false;\n      this.setScrollPosition(0);\n    } catch (error: unknown) {\n      console.error('Error loading initial data block:', error);\n      this.cdr.markForCheck();\n      this.resetting = false;\n    }\n    // const initialBlockStatus = initialBlock.$status();\n    // if (initialBlockStatus !== 'success') {\n    //     console.error('Initial data block failed to load:', initialBlockStatus);\n    //     this.cdr.markForCheck();\n    //     return;\n    // }\n  }\n\n  private getBlock(blockId: number): DataBlock<TData> {\n    if (this.allDataInfo) {\n      // we are using full data\n      const blockPromise = this.allDataInfo.promise.then(data => {\n        return data.slice(blockId * this.blockRowCount, (blockId + 1) * this.blockRowCount);\n      });\n      return new DataBlock<TData>(blockId, undefined, this.blockRowCount, this.dataOptions!.getRowKey, blockPromise);\n    } else {\n      // we are using incremental data\n      const blockAbort = new AbortController();\n      let blockPromise: Promise<{ key: Primitive; data: TData }[]>;\n      if (!Number.isFinite(this.blockRowCount)) {\n        blockPromise = Promise.resolve([]);\n      } else {\n        blockPromise = (this.dataOptions as IncrementalDataOptions<TData>)\n          .getDataBlock({\n            offset: blockId * this.blockRowCount,\n            count: this.blockRowCount,\n            sort: this.sort,\n            abort: blockAbort.signal,\n          })\n          .then(response => {\n            this._totalRowCount = response.total;\n            return response.data.map(row => ({\n              key: this.dataOptions!.getRowKey(row),\n              data: row,\n            }));\n          })\n          .then(data => {\n            if (data.length > this.blockRowCount) {\n              console.warn(`Data block received unexpected data: count ${data.length}, expected max count ${this.blockRowCount}`);\n              throw new Error(`Data block received unexpected data: count ${data.length}, expected max count ${this.blockRowCount}`);\n            }\n            return data;\n          });\n      }\n      return new DataBlock<TData>(blockId, blockAbort, this.blockRowCount, this.dataOptions!.getRowKey, blockPromise);\n    }\n  }\n\n  setScrollPosition(topPx: number) {\n    if (this.resetting) {\n      return;\n    }\n    // get the block IDs in the current viewPort\n    const bottomPx = topPx + this.dataWindowHeightPx;\n\n    const firstVisibleBlockId = Math.floor(topPx / this.dataBlockHeightPx);\n    const lastVisibleBlockId = Math.floor(bottomPx / this.dataBlockHeightPx);\n\n    const dataBlockWindow = this.dataBlockWindow;\n    // we are loading\n    // - [dataBlockWindow] blocks before the first visible block\n    // - all the visible blocks\n    // - [dataBlockWindow] blocks after the last visible block\n    const blockIdsToLoad: number[] = [];\n\n    for (let i = firstVisibleBlockId - dataBlockWindow; i <= lastVisibleBlockId + dataBlockWindow; i++) {\n      if (i < 0) {\n        continue;\n      }\n      if (i * this.blockRowCount >= this.totalRowCount) {\n        // No more data to load\n        continue;\n      }\n      blockIdsToLoad.push(i);\n    }\n\n    this.$_blocks.update(existing => {\n      const blocks: DataBlock<TData>[] = [];\n      for (const existingBlock of existing.blocks) {\n        if (blockIdsToLoad.includes(existingBlock.id)) {\n          blocks.push(existingBlock);\n        } else {\n          existingBlock.abort?.abort();\n        }\n      }\n      for (const blockId of blockIdsToLoad) {\n        if (!blocks.some(b => b.id === blockId)) {\n          const newBlock = this.getBlock(blockId);\n          blocks.push(newBlock);\n        }\n      }\n\n      existing.blocks = blocks.sort((a, b) => a.id - b.id);\n\n      // // rows before the first block\n      existing.prePixels = existing.blocks.length === 0 ? 0 : existing.blocks[0].id * this.dataBlockHeightPx;\n      // // rows after the last block\n      const lastBlock = existing.blocks.length === 0 ? undefined : existing.blocks[existing.blocks.length - 1];\n      const preAndDisplayedRowsCount = (lastBlock?.offset ?? 0) + (this.blockRowCount ?? 0);\n      const postRowsCount = this.totalRowCount - preAndDisplayedRowsCount;\n      existing.postPixels = Math.max(0, postRowsCount) * this.dataRowHeightPx;\n      return existing;\n    });\n  }\n}\n\nexport interface BlocksInfo<TData> {\n  prePixels: number;\n  blocks: DataBlock<TData>[];\n  postPixels: number;\n}\n\nexport class AllDataInfo<TData> {\n  private readonly $_allKeys = signal<Set<Primitive>>(new Set<Primitive>());\n  get $allKeys(): Signal<Set<Primitive>> {\n    return this.$_allKeys;\n  }\n  private readonly $_status = signal<'canceled' | 'error' | 'loading' | 'success'>('loading');\n  get $status(): Signal<'canceled' | 'error' | 'loading' | 'success'> {\n    return this.$_status;\n  }\n  constructor(\n    public readonly promise: Promise<{ key: Primitive; data: TData }[]>,\n    public readonly abort: AbortController,\n  ) {\n    promise\n      .then(data => {\n        this.$_allKeys.set(new Set(data.map(item => item.key)));\n        this.$_status.set('success');\n      })\n      .catch((error: unknown) => {\n        if (this.abort.signal.aborted) {\n          this.$_status.set('canceled');\n          throw error;\n        }\n        this.$_status.set('error');\n        console.error('Error loading all data:', error);\n        throw error;\n      });\n  }\n}\n","class CommonSelectionOptions {\n  constructor(\n    public readonly selectionMode: 'checkbox' | 'row-and-checkbox' = 'row-and-checkbox',\n    public readonly clearSelectedKeysOnManualReset: boolean = true,\n    public readonly clearSelectedKeysOnAnyReset = false,\n  ) {}\n}\nexport class SingleSelectionOptions extends CommonSelectionOptions {\n  constructor(\n    /**\n     * Selection mode for the table.\n     * - 'checkbox': Only checkbox selection is allowed.\n     * - 'row-and-checkbox': Both row and checkbox selection are allowed.\n     *\n     */\n    selectionMode: 'checkbox' | 'row-and-checkbox' = 'row-and-checkbox',\n    /**\n     * Clear the selected keys when a manual reset is triggered.\n     * @default true\n     */\n    clearSelectedRowsOnManualReset: boolean = true,\n    /**\n     * Clear the selected keys when any reset is triggered.\n     * This includes manual resets and automatic resets (e.g., when size/sort/displayed cols, etc changes).\n     * @default false\n     */\n    clearSelectedRowsOnAnyReset = false,\n  ) {\n    super(selectionMode, clearSelectedRowsOnManualReset, clearSelectedRowsOnAnyReset);\n  }\n}\nexport class MultiSelectionOptions extends CommonSelectionOptions {\n  constructor(\n    /**\n     * Configuration for the header checkbox mode.\n     * This determines how the header checkbox behaves.\n     * - 'none': No header checkbox is displayed.\n     * - 'selectNone': A header checkbox is displayed that can only unselect all rows that have been selected\n     * - `SelectAll`: A header checkbox is displayed that can select all rows that have been selected. Requires FullDataOptions to be used which can lead to performance issues with large datasets.\n     */\n    public readonly headerCheckboxMode: 'none' | 'selectNone' | 'selectAll',\n\n    /**\n     * Selection mode for the table.\n     * - 'checkbox': Only checkbox selection is allowed.\n     * - 'row-and-checkbox': Both row and checkbox selection are allowed.\n     *\n     */\n    selectionMode: 'checkbox' | 'row-and-checkbox' = 'row-and-checkbox',\n\n    /**\n     * Clear the selected keys when a manual reset is triggered.\n     * @default true\n     */\n    clearSelectedKeysOnManualReset: boolean = true,\n    /**\n     * Clear the selected keys when any reset is triggered.\n     * This includes manual resets and automatic resets (e.g., when size/sort/displayed cols, etc changes).\n     * @default false\n     */\n    clearSelectedKeysOnAnyReset: boolean = false,\n  ) {\n    super(selectionMode, clearSelectedKeysOnManualReset, clearSelectedKeysOnAnyReset);\n  }\n}\n\nexport type SelectionOptions = SingleSelectionOptions | MultiSelectionOptions;\n","import { Directive, ElementRef, HostListener, inject, input, Renderer2 } from '@angular/core';\n\n@Directive({\n  selector: '[resizerFor]',\n  standalone: false,\n})\nexport class ResizerDirective {\n  readonly $columnElement = input.required<HTMLElement>({\n    alias: 'resizerFor',\n  });\n  readonly $enabled = input<boolean>(true, {\n    alias: 'enabled',\n  });\n  private readonly resizerElement = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly renderer = inject(Renderer2);\n\n  private dragging: ResizerDraggingOptions | undefined;\n  @HostListener('mousedown', ['$event'])\n  onMouseDown(event: MouseEvent): void {\n    if (this.dragging !== undefined || !this.$enabled()) {\n      return;\n    }\n    const element = this.$columnElement();\n    this.dragging = {\n      columnElement: element,\n      startWidth: +getComputedStyle(element).width.replace('px', ''),\n      startX: event.clientX,\n    };\n    this.renderer.addClass(this.resizerElement.nativeElement, 'dragging');\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    document.body.style.userSelect = 'none';\n    const mouseMoveHandler = (e: MouseEvent) => {\n      const x = e.clientX;\n      if (!this.dragging) {\n        return;\n      }\n      const change = x - this.dragging.startX;\n      const newWidth = this.dragging.startWidth + change;\n\n      this.dragging.columnElement.style.width = `${newWidth}px`;\n      this.renderer.setStyle(element, 'flex-grow', 'unset');\n    };\n    document.addEventListener('mousemove', mouseMoveHandler);\n    const mouseUpHandler = () => {\n      this.renderer.removeClass(this.resizerElement.nativeElement, 'dragging');\n      this.dragging = undefined;\n\n      document.removeEventListener('mousemove', mouseMoveHandler);\n      document.removeEventListener('mouseup', mouseUpHandler);\n      document.body.style.userSelect = '';\n    };\n\n    document.addEventListener('mouseup', mouseUpHandler);\n  }\n}\ninterface ResizerDraggingOptions {\n  columnElement: HTMLElement;\n  startWidth: number;\n  startX: number;\n}\n","import type { PipeTransform, TemplateRef } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { TooltipArgs } from 'tableau-ui-angular/tooltip';\n\nimport type { HeaderContext, HeaderTooltipContext } from './header-context';\nimport type { ColumnDefDirective, SortOrderPair } from '../column-def/column-def.directive';\nimport type { TableComponent } from '../../table.component';\nimport type { DataSort } from '../../sorting/data-sort';\n\n@Pipe({\n  name: 'headerTooltip',\n  standalone: false,\n})\nexport class HeaderTooltipPipe implements PipeTransform {\n  transform<TData>(\n    columnDef: ColumnDefDirective<TData>,\n    table: TableComponent<TData>,\n    headerContext: HeaderContext<TData>,\n    autoHeaderTooltipTemplate: TemplateRef<{ $implicit: HeaderTooltipContext<TData> }>,\n    contextParams: {\n      sortMode: 'multi' | 'single';\n      sortable: boolean;\n      sortOrder: SortOrderPair;\n      currentSort: { info: DataSort; index: number } | undefined;\n      allSorts: DataSort[];\n    },\n  ): () => TooltipArgs<{ $implicit: HeaderTooltipContext<TData> }> {\n    return () => {\n      const tooltipArgs: TooltipArgs<{ $implicit: HeaderTooltipContext<TData> }> = {\n        template: undefined,\n        position: 'top',\n        margin: '1rem',\n        context: {\n          $implicit: {\n            ...headerContext,\n            headerTemplate: columnDef.$header()?.templateRef,\n            ...contextParams,\n          },\n        },\n      };\n\n      // if we have a custom [tabHeaderTooltipDef] directive in our column definition\n      const tooltipDef = columnDef.$headerTooltip();\n      if (tooltipDef) {\n        // check if user has provided a value to show the custom tooltip\n        // this can be a boolean or a function that returns a boolean\n        const showCustomParam = tooltipDef.$showTooltip();\n        let showCustomTooltip: boolean;\n        // if its a function, call it with the header context to see if we need to show the custom tooltip\n        if (typeof showCustomParam === 'function') {\n          showCustomTooltip = showCustomParam(headerContext);\n        } else {\n          // if its a boolean, use it directly\n          showCustomTooltip = showCustomParam;\n        }\n        // if we show custom tooltip, use the custom template\n        if (showCustomTooltip) {\n          tooltipArgs.template = tooltipDef.templateRef;\n          tooltipArgs.position = tooltipDef.$tooltipPosition();\n          tooltipArgs.margin = tooltipDef.$tooltipMargin();\n        }\n      }\n\n      // if we have not set tooltipArgs.template yet,\n      // it means we are not showing a custom tooltip\n      if (tooltipArgs.template === undefined && columnDef.$showAutoHeaderTooltip()) {\n        tooltipArgs.template = autoHeaderTooltipTemplate;\n      }\n\n      // return the tooltip args\n      return tooltipArgs;\n    };\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { ColumnDefDirective } from '../column-def/column-def.directive';\nimport type { HeaderContext } from './header-context';\n\n@Pipe({\n  name: 'headerContext',\n  standalone: false,\n})\nexport class HeaderContextPipe implements PipeTransform {\n  transform<TData>(value: ColumnDefDirective<TData>, index: number, first: boolean, last: boolean, even: boolean, odd: boolean, count: number): { $implicit: HeaderContext<TData> } {\n    return {\n      $implicit: value.buildHeaderContext(index, first, last, even, odd, count),\n    };\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { HeaderContext } from './header-context';\n\n@Pipe({\n  name: 'headerClass',\n  standalone: false,\n})\nexport class HeaderClassPipe implements PipeTransform {\n  transform<TData>(ctx: HeaderContext<TData>): string | undefined {\n    if (typeof ctx.columnDef.$headerClass() === 'string') {\n      return ctx.columnDef.$headerClass() as string;\n    }\n    if (typeof ctx.columnDef.$headerClass() === 'function') {\n      return (ctx.columnDef.$headerClass() as (ctx: HeaderContext<TData>) => string | undefined)(ctx);\n    }\n    return undefined;\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { ColumnDefDirective } from '../column-def/column-def.directive';\nimport type { CellContext } from './cell-context';\n\n@Pipe({\n  name: 'cellContext',\n  standalone: false,\n})\nexport class CellContextPipe implements PipeTransform {\n  transform<TData>(\n    value: TData,\n    maxRowCount: number,\n    def: ColumnDefDirective<TData>,\n    index: number,\n    first: boolean,\n    last: boolean,\n    even: boolean,\n    odd: boolean,\n    count: number,\n    columnIndex: number,\n    columnFirst: boolean,\n    columnLast: boolean,\n    columnEven: boolean,\n    columnOdd: boolean,\n    columnCount: number,\n  ): { $implicit: CellContext<TData> } {\n    return {\n      $implicit: def.buildCellContext(value, maxRowCount, index, first, last, even, odd, count, columnIndex, columnFirst, columnLast, columnEven, columnOdd, columnCount),\n    };\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { CellContext } from './cell-context';\n\n@Pipe({\n  name: 'cellClass',\n  standalone: false,\n})\nexport class CellClassPipe implements PipeTransform {\n  transform<TData>(ctx: CellContext<TData>): string | undefined {\n    if (typeof ctx.meta.columnDef.$cellClass() === 'string') {\n      return ctx.meta.columnDef.$cellClass() as string;\n    }\n    if (typeof ctx.meta.columnDef.$cellClass() === 'function') {\n      return (ctx.meta.columnDef.$cellClass() as (ctx: CellContext<TData>) => string | undefined)(ctx);\n    }\n    return undefined;\n  }\n}\n","import type { PipeTransform, TemplateRef } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { CellContext, CellTooltipContext } from './cell-context';\nimport type { TooltipArgs } from 'tableau-ui-angular/tooltip';\nimport type { DataBlock } from '../../data/data-block';\nimport type { ColumnDefDirective } from '../column-def/column-def.directive';\n\n@Pipe({\n  name: 'cellTooltip',\n  standalone: false,\n})\nexport class CellTooltipPipe implements PipeTransform {\n  transform<TData>(\n    cellElement: HTMLDivElement,\n    columnDef: ColumnDefDirective<TData>,\n    cellContext: CellContext<TData>,\n    block: DataBlock<TData>,\n  ): () => TooltipArgs<{ $implicit: CellTooltipContext<TData> }> {\n    return () => {\n      const tooltipArgs: TooltipArgs<{ $implicit: CellTooltipContext<TData> }> = {\n        template: undefined,\n        position: 'bottom',\n        margin: '0px',\n        context: {\n          $implicit: {\n            ...cellContext,\n            cellTemplate: columnDef.$cell().templateRef,\n            isRowCellClamped: false,\n          },\n        },\n      };\n      // if the cell's block is not loaded yet, we don't show the tooltip\n      if (block.$status() !== 'success') {\n        return tooltipArgs;\n      }\n      // if we have a custom [tabCellTooltipDef] directive in our column definition\n      const tooltipDef = columnDef.$cellTooltip();\n      if (tooltipDef !== undefined) {\n        const isClamped = this.isClamped(cellElement);\n        // check if user has provided a value to show the custom tooltip\n        // this can be a boolean or a function that returns a boolean\n        const showCustomParam = tooltipDef.$showTooltip();\n        let showCustomTooltip: boolean;\n        // if its a function, call it with the header context to see if we need to show the custom tooltip\n        if (typeof showCustomParam === 'function') {\n          showCustomTooltip = showCustomParam(cellContext, isClamped);\n        } else {\n          // if its a boolean, use it directly\n          showCustomTooltip = showCustomParam;\n        }\n        // if we show custom tooltip, use the custom template\n        if (showCustomTooltip) {\n          tooltipArgs.context!.$implicit.isRowCellClamped = isClamped;\n          tooltipArgs.template = tooltipDef.templateRef;\n          tooltipArgs.position = tooltipDef.$tooltipPosition();\n          tooltipArgs.margin = tooltipDef.$tooltipMargin();\n        }\n      }\n\n      // if we have not set tooltipArgs.template yet,\n      // it means we are not showing a custom tooltip\n      // check if we have auto tooltip enabled and we have clamped the cell context\n      if (tooltipArgs.template === undefined && columnDef.$showAutoCellTooltip()) {\n        // check if the cell is clamped\n        const isClamped = this.isClamped(cellElement);\n        // if the cell is clamped, we show the auto tooltip\n        if (isClamped) {\n          // use the cell template as the tooltip template\n          const cellTemplate = columnDef.$cell().templateRef;\n          tooltipArgs.template = cellTemplate as TemplateRef<{ $implicit: CellTooltipContext<TData> }>;\n        }\n      }\n\n      return tooltipArgs;\n    };\n  }\n\n  isClamped(cellElement: HTMLDivElement): boolean {\n    const clampElement = cellElement.querySelector('.line-clamp');\n    return clampElement !== null && clampElement.scrollHeight > clampElement.clientHeight;\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { DataSort } from './data-sort';\n@Pipe({\n  name: 'sortInfo',\n  standalone: false,\n})\nexport class SortInfoPipe implements PipeTransform {\n  transform(sorts: DataSort[], colId: string, propertyName: string | undefined): { info: DataSort; index: number } | undefined {\n    return SortInfoPipe.getSortInfo(sorts, colId, propertyName);\n  }\n\n  static getSortInfo(sorts: DataSort[], colId: string, propertyName: string | undefined): { info: DataSort; index: number } | undefined {\n    const p = propertyName ?? colId;\n    const index = sorts.findIndex(e => e.property === p);\n    if (index === -1) {\n      return undefined;\n    }\n    const info = sorts[index];\n    return { info, index };\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\n\n@Pipe({\n  name: 'colWidth',\n  standalone: false,\n})\nexport class ColWidthPipe implements PipeTransform {\n  transform(value: number | string | undefined, mode: 'flexGrowOnly' | 'width' | 'widthUnitsOnly'): string {\n    if (value === undefined) {\n      return '';\n    }\n    if (typeof value === 'string') {\n      const isNumber = /^(\\d*(?:\\.\\d+)?)$/.exec(value.trim());\n      if (!isNumber) {\n        switch (mode) {\n          case 'widthUnitsOnly':\n          case 'width':\n            return value;\n          case 'flexGrowOnly':\n            return '';\n        }\n      }\n    }\n\n    switch (mode) {\n      case 'widthUnitsOnly':\n        return '';\n      case 'flexGrowOnly':\n        return value.toString();\n      case 'width':\n        return `${value}px`;\n      default:\n        return '';\n    }\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { ColRenderedWidthDirective } from './col-rendered-width.directive';\nimport type { Observable } from 'rxjs';\nimport { map, of } from 'rxjs';\n\n@Pipe({\n  name: 'cellWidth',\n  standalone: false,\n})\nexport class CellWidthPipe implements PipeTransform {\n  transform(directives: readonly ColRenderedWidthDirective[], colId: string, padding: string): Observable<string> {\n    const col = directives.find(d => d.columnId() === colId);\n    if (!col) {\n      return of('');\n    }\n    const pad = this.parsePadding(padding);\n    //return of('10px');\n    return col.renderedWidth.pipe(map(e => `calc(${e}px - ${pad.left} - ${pad.right})`));\n  }\n\n  private parsePadding(padding: string): { top: string; right: string; bottom: string; left: string } {\n    const parts = padding.trim().split(/\\s+/);\n\n    switch (parts.length) {\n      case 1:\n        return {\n          top: parts[0],\n          right: parts[0],\n          bottom: parts[0],\n          left: parts[0],\n        };\n      case 2:\n        return {\n          top: parts[0],\n          right: parts[1],\n          bottom: parts[0],\n          left: parts[1],\n        };\n      case 3:\n        return {\n          top: parts[0],\n          right: parts[1],\n          bottom: parts[2],\n          left: parts[1],\n        };\n      case 4:\n        return {\n          top: parts[0],\n          right: parts[1],\n          bottom: parts[2],\n          left: parts[3],\n        };\n      default:\n        throw new Error('Invalid padding value');\n    }\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { SelectionOptions } from './selection-options';\nimport { MultiSelectionOptions } from './selection-options';\n\n@Pipe({\n  name: 'headerCheckboxMode',\n  standalone: false,\n})\nexport class HeaderCheckboxModePipe implements PipeTransform {\n  transform(selectionOptions: SelectionOptions | undefined): 'none' | 'selectNone' | 'selectAll' | undefined {\n    if (selectionOptions instanceof MultiSelectionOptions) {\n      return selectionOptions.headerCheckboxMode;\n    }\n    return 'none';\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport type { DataOptions } from '../data/data-options';\n\n@Pipe({\n  name: 'rowSelected',\n  standalone: false,\n})\nexport class RowSelectedPipe<TData> implements PipeTransform {\n  transform(row: TData, selectedRows: Map<Primitive, TData>, dataOptions: DataOptions<TData>): boolean {\n    const key = dataOptions.getRowKey(row);\n    return selectedRows.has(key);\n  }\n}\n","import type { InputSignal, ModelSignal, TemplateRef } from '@angular/core';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  contentChildren,\n  effect,\n  ElementRef,\n  HostListener,\n  inject,\n  input,\n  model,\n  signal,\n  untracked,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport type { SortOrderPair } from './defs/column-def/column-def.directive';\nimport { ColumnDefDirective } from './defs/column-def/column-def.directive';\nimport type { DataSort } from './sorting/data-sort';\nimport { ColRenderedWidthDirective } from './column-widths/col-rendered-width.directive';\nimport { DataManager } from './data/data-manager';\nimport type { SelectionOptions } from './selection/selection-options';\nimport { MultiSelectionOptions, SingleSelectionOptions } from './selection/selection-options';\nimport type { DataOptions } from './data/data-options';\nimport type { Primitive } from 'tableau-ui-angular/types';\n\n@Component({\n  selector: 'tab-table',\n  standalone: false,\n  templateUrl: './table.component.html',\n  styleUrl: './table.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {},\n})\nexport class TableComponent<TData = number> {\n  protected readonly checkboxColWidth = '2.5em';\n\n  readonly self = this;\n  // #region Inputs & Outputs\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The column IDs to display in the table. The order of the IDs determines the order of the columns.\n   * If undefined, all columns will be displayed in the order they are defined in the table.\n   * @default undefined\n   */\n  readonly $displayedColumns: ModelSignal<string[] | undefined> = model<string[] | undefined>(undefined, {\n    alias: 'displayedColumns',\n  });\n\n  readonly $dataOptions = input.required<DataOptions<TData>>({\n    alias: 'dataOptions',\n  });\n\n  /**\n   * The number of data blocks to load before and after the currently displayed block(s) based on scroll position.\n   * This is used to determine how many blocks to load in advance for smooth scrolling.\n   * A data block is a chunk of data that is loaded from the server. It's size is is whatever fits the current viewport.\n   * @default 3\n   */\n  readonly $dataBlockWindow = input<number>(3, {\n    alias: 'dataBlockWindow',\n  });\n\n  /**\n   * The height of the table data row.\n   * This must be a valid CSS value.\n   * Fixed height is required for virtual scrolling to work properly.\n   * If the height is not fixed, the table will not be able to calculate the row heights and will not be able to scroll properly.\n   * @default '2.5em'\n   */\n  readonly $dataRowHeight = input<string>('2.5em', {\n    alias: 'dataRowHeight',\n  });\n\n  /**\n   * The margin for all header cells\n   * @default '0.5em'\n   */\n  readonly $headerPadding = input<string>('0.5em', {\n    alias: 'headerPadding',\n  });\n\n  /**\n   * The margin for all data cells\n   * @default '0 0.5em'\n   */\n  readonly $dataPadding = input<string>('0 0.5em', {\n    alias: 'dataPadding',\n  });\n\n  /**\n   * The sorting mode. When multi sort is enabled, holding SHIFT when clicking a column header will add it to the sort list\n   * @default single\n   */\n  readonly $sortMode = input<'multi' | 'single'>('single', {\n    alias: 'sortMode',\n  });\n\n  /**\n   * The sort models. Initial sort mode can be provided here.\n   * This gets updated when the sort is changed by the user on the UI dynamically\n   * @default []\n   */\n  readonly $sort = model<DataSort[]>([], {\n    alias: 'sort',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The column ID to pin to the left side of the table.\n   * If undefined, no column will be pinned to the left.\n   * @default undefined\n   */\n  readonly $pinnedLeftColumn: ModelSignal<string | undefined> = model<string | undefined>(undefined, {\n    alias: 'pinnedLeftColumn',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The column ID to pin to the right side of the table.\n   * If undefined, no column will be pinned to the right.\n   * @default undefined\n   */\n  readonly $pinnedRightColumn: ModelSignal<string | undefined> = model<string | undefined>(undefined, {\n    alias: 'pinnedRightColumn',\n  });\n\n  /**\n   * Whether to show a striped table.\n   * This will alternate the background color of the rows.\n   * @default false\n   */\n  readonly $striped = model<boolean>(false, {\n    alias: 'striped',\n  });\n\n  /**\n   * The template to use when there is no data to display.\n   * If 'default', a default template will be used.\n   * If a TemplateRef is provided, it will be used as the no data template.\n   * @default 'default'\n   */\n  readonly $noDataTemplate = input<TemplateRef<unknown> | string | 'default'>('default', {\n    alias: 'noDataTemplate',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  /**\n   * The options for the selection mode.\n   * If undefined, no selection will be enabled.\n   * If a SingleSelectionOptions is provided, single selection will be enabled.\n   * If a MultiSelectionOptions is provided, multi selection will be enabled.\n   * @default undefined\n   */\n  readonly $selectionOptions: InputSignal<SelectionOptions | undefined> = input<SelectionOptions>(undefined, {\n    alias: 'selectionOptions',\n  });\n  /**\n   * The selected rows.\n   * This is used to determine which rows are selected in the table.\n   * If the selection options are set to single selection, this will only contain a maximum of one row.\n   * If the selection options are set to multi selection, this can contain multiple rows.\n   * This is updated when the selection changes.\n   * @default []\n   * @see {@link $selectionOptions}\n   */\n  readonly $selectedRows = model<Map<Primitive, TData>>(new Map<Primitive, TData>(), {\n    alias: 'selectedRows',\n  });\n\n  // #endregion\n  // #region Columns\n  public readonly $columnDefs = contentChildren<ColumnDefDirective<TData>>(ColumnDefDirective);\n  protected readonly $displayedColumnDefs = computed(\n    () => {\n      let columnDefs = this.$columnDefs();\n      const displayedColumns = this.$displayedColumns();\n      const pinnedLeftColumnId = this.$pinnedLeftColumn();\n      const pinnedRightColumnId = this.$pinnedRightColumn();\n      if (displayedColumns) {\n        const displayColumnDefs = [];\n        for (const colId of displayedColumns) {\n          const colDef = columnDefs.find(e => e.$id() === colId);\n          if (colDef) {\n            displayColumnDefs.push(colDef);\n          }\n        }\n        columnDefs = displayColumnDefs;\n      }\n      const pinnedLeftColumn = columnDefs.find(e => e.$id() === pinnedLeftColumnId);\n      const pinnedRightColumn = columnDefs.find(e => e.$id() === pinnedRightColumnId);\n\n      const ret: {\n        id: string;\n        col: ColumnDefDirective<TData>;\n        pinnedLeft: boolean;\n        pinnedRight: boolean;\n        sortOrder: SortOrderPair;\n      }[] = [];\n      if (pinnedLeftColumn) {\n        ret.push({\n          id: pinnedLeftColumn.$id(),\n          col: pinnedLeftColumn,\n          pinnedLeft: true,\n          pinnedRight: false,\n          sortOrder: pinnedLeftColumn.$sortOrder(),\n        });\n      }\n      for (const col of columnDefs.filter(e => e !== pinnedLeftColumn && e !== pinnedRightColumn)) {\n        ret.push({\n          id: col.$id(),\n          col,\n          pinnedLeft: false,\n          pinnedRight: false,\n          sortOrder: col.$sortOrder(),\n        });\n      }\n      if (pinnedRightColumn) {\n        ret.push({\n          id: pinnedRightColumn.$id(),\n          col: pinnedRightColumn,\n          pinnedLeft: false,\n          pinnedRight: true,\n          sortOrder: pinnedRightColumn.$sortOrder(),\n        });\n      }\n      return ret;\n    },\n    {\n      equal: (a, b) => {\n        if (a.length !== b.length) {\n          return false;\n        }\n        for (let i = 0; i < a.length; i++) {\n          if (a[i].id !== b[i].id || a[i].pinnedLeft !== b[i].pinnedLeft || a[i].pinnedRight !== b[i].pinnedRight || a[i].col.$id() !== b[i].col.$id()) {\n            return false;\n          }\n        }\n        return true;\n      },\n    },\n  );\n  // #endregion\n  // #region View Children\n  protected readonly $columnWidthDirectives = viewChildren(ColRenderedWidthDirective);\n  private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly cdr = inject<ChangeDetectorRef>(ChangeDetectorRef);\n  private readonly $headerRow = viewChild.required<ElementRef<HTMLElement>>('headerRow');\n  private readonly $dataRowSizer = viewChild.required<ElementRef<HTMLElement>>('dataSizer');\n  // #endregion\n  protected readonly _dataManager = new DataManager<TData>(this.cdr);\n  get dataManager() {\n    return this._dataManager;\n  }\n  // #region Load & Reset\n  private loaded = false;\n  private dataWindowHeightPx: number = 0;\n  private dataRowHeightPx: number = 0;\n\n  /**\n   * Loads the table data. Only callable once. If the table is already loaded, this will do nothing.\n   * This will calculate the available window and row height and reset() the table.\n   * Use this to load the table initially\n   * Use reload() to reload the table data if the table size or row size changes\n   */\n  async load() {\n    if (this.loaded) {\n      return false;\n    }\n    return this.reload();\n  }\n  /**\n   * Reloads the table data.\n   * This will re-calculate the available window and row height and reset() the table.\n   * Use this to reload the table data if the table size or row size changes\n   */\n  async reload() {\n    this.loaded = false;\n    this.initializeLineClamp();\n    const host = this.hostElement.nativeElement;\n    // calculate data window height\n    this.dataWindowHeightPx = host.clientHeight - this.$headerRow().nativeElement.clientHeight;\n\n    this.dataRowHeightPx = this.$dataRowSizer().nativeElement.clientHeight;\n\n    const initialLoad = await this.resetInternal(this.$sort(), this.$dataOptions(), this.$dataBlockWindow());\n    if (initialLoad) {\n      this.loaded = true;\n    }\n    return initialLoad;\n  }\n  private readonly dataManagerReset = effect(() => {\n    const sort = this.$sort();\n    const dataOptions = this.$dataOptions();\n    const dataBlockWindow = this.$dataBlockWindow();\n    const selectionOptions = this.$selectionOptions();\n    if (!this.loaded) {\n      return;\n    }\n    if (selectionOptions?.clearSelectedKeysOnAnyReset === true) {\n      this.$selectedRows.set(new Map<Primitive, TData>());\n    }\n    if (!this.loaded) {\n      return;\n    }\n\n    untracked(() => void this.resetInternal(sort, dataOptions, dataBlockWindow));\n  });\n  private async resetInternal(sort: DataSort[] | undefined, dataOptions: DataOptions<TData> | undefined, dataBlockWindow: number): Promise<boolean> {\n    if (this.dataRowHeightPx === 0 || this.dataWindowHeightPx === 0 || !sort || !dataOptions) {\n      console.warn('Table reset called with undefined parameters, ignoring');\n      return false;\n    }\n    await this._dataManager.reset(this.dataWindowHeightPx, this.dataRowHeightPx, sort, dataBlockWindow, dataOptions);\n    return true;\n  }\n\n  /**\n   * Resets the table to its initial state.\n   * This will reset the scroll position, data, and optionally selection.\n   * If resetSort is true, the sort will also be reset to the initial state.\n   * @param resetSort Whether to reset the sort to the initial state\n   * @returns A promise that resolves to true if the reset was successful, false otherwise.\n   */\n  async reset(resetSort: boolean = false): Promise<boolean> {\n    if (!this.loaded) {\n      return false;\n    }\n    if (resetSort) {\n      this.$sort.set([]);\n    }\n    const sort = this.$sort();\n    const dataOptions = this.$dataOptions();\n    const dataBlockWindow = this.$dataBlockWindow();\n    const selectionOptions = this.$selectionOptions();\n    if (selectionOptions?.clearSelectedKeysOnManualReset !== false) {\n      this.$selectedRows.set(new Map<Primitive, TData>());\n    }\n    return this.resetInternal(sort, dataOptions, dataBlockWindow);\n  }\n  // #endregion\n\n  // #region Sort\n  protected onColumnHeaderClick(e: MouseEvent, def: ColumnDefDirective<TData>) {\n    if (!def.$sortable()) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    (e.target as HTMLElement).blur();\n\n    const propertyName = def.$propertyName() ?? def.$id();\n    const sort = this.$sort();\n    const sortOrder = def.$sortOrder();\n    const currentSort = sort.find(f => f.property === propertyName);\n    if (this.$sortMode() === 'single' || !e.shiftKey) {\n      if (currentSort?.direction === sortOrder[1]) {\n        this.$sort.set([]);\n      } else {\n        this.$sort.set([\n          {\n            property: propertyName,\n            direction: currentSort === undefined ? sortOrder[0] : currentSort.direction === 'asc' ? 'desc' : 'asc',\n          },\n        ]);\n      }\n    } else {\n      for (const s of sort) {\n        if (s.property === propertyName) {\n          // toggle sort mode\n          if (s.direction === def.$sortOrder()[1]) {\n            // emove sort\n            this.$sort.set(sort.filter(f => f.property !== propertyName));\n            return;\n          } else {\n            s.direction = s.direction === 'asc' ? 'desc' : 'asc';\n            this.$sort.set([...sort]);\n          }\n\n          return;\n        }\n      }\n      // add new sort\n      this.$sort.set([\n        ...sort,\n        {\n          property: propertyName,\n          direction: def.$sortOrder()[0],\n        },\n      ]);\n    }\n  }\n  // #endregion\n  // #region Scrolling & Virtualization\n  @HostListener('scroll', ['$event.target'])\n  private onScroll(element: HTMLElement) {\n    this._dataManager.setScrollPosition(element.scrollTop);\n  }\n  // #endregion\n\n  // #region Selection\n\n  // #region MultiSelect Header Checkbox\n  protected readonly $selectionMultiHeaderCheckboxSelected = model<boolean | 'partial'>(this.$selectedRows().size > 0 ? 'partial' : false);\n  selectionMultiHeaderCheckboxSelectNoneChanged() {\n    this.$selectedRows.set(new Map<Primitive, TData>());\n  }\n  async selectionMultiHeaderCheckboxSelectAllChanged(val: boolean | 'partial') {\n    if (val === true) {\n      if (this._dataManager.allDataInfo?.$status() !== 'success') {\n        return;\n      }\n      const allData = await this._dataManager.allDataInfo.promise;\n      this.$selectedRows.set(new Map<Primitive, TData>(allData.map(e => [e.key, e.data])));\n    } else {\n      this.$selectedRows.set(new Map<Primitive, TData>());\n    }\n  }\n  private readonly updateSelectionMultiHeaderCheckboxSelected = effect(() => {\n    let value: boolean | 'partial' = false;\n    const selectedRows = this.$selectedRows();\n    if (selectedRows.size === 0) {\n      value = false;\n    } else if (this._dataManager.allDataInfo?.$status() === 'success' && [...this._dataManager.allDataInfo.$allKeys().keys()].every(key => selectedRows.has(key))) {\n      value = true;\n    } else {\n      value = 'partial';\n    }\n    this.$selectionMultiHeaderCheckboxSelected.set(value);\n  });\n  // #endregion\n\n  protected rowClicked(row: TData, e: MouseEvent) {\n    const selectionOptions = this.$selectionOptions();\n    if (!selectionOptions) {\n      return;\n    }\n    if (selectionOptions.selectionMode !== 'row-and-checkbox') {\n      return;\n    }\n    e.stopPropagation();\n    e.preventDefault();\n    const dataOptions = this.$dataOptions();\n    const key = dataOptions.getRowKey(row);\n    const selectedRows = this.$selectedRows();\n    const isSelected = selectedRows.has(key);\n\n    if (selectionOptions instanceof MultiSelectionOptions) {\n      if (e.shiftKey || e.ctrlKey || e.metaKey) {\n        this.checkboxSelectChange(row, !isSelected);\n      } else {\n        this.$selectedRows.set(new Map<Primitive, TData>([[key, row]]));\n      }\n    } else if (selectionOptions instanceof SingleSelectionOptions) {\n      if (isSelected) {\n        this.$selectedRows.set(new Map<Primitive, TData>());\n      } else {\n        this.$selectedRows.set(new Map<Primitive, TData>([[key, row]]));\n      }\n    }\n\n    // select the row\n  }\n  protected checkboxClicked(e: MouseEvent) {\n    e.stopPropagation();\n    e.preventDefault();\n  }\n  protected checkboxSelectChange(row: TData, checked: boolean | 'partial') {\n    const selectionOptions = this.$selectionOptions();\n    if (!selectionOptions) {\n      return;\n    }\n    const dataOptions = this.$dataOptions();\n    if (selectionOptions instanceof MultiSelectionOptions) {\n      const key = dataOptions.getRowKey(row);\n      const selectedRows = this.$selectedRows();\n      if (checked === true) {\n        selectedRows.set(key, row);\n      } else {\n        selectedRows.delete(key);\n      }\n      this.$selectedRows.set(new Map<Primitive, TData>(selectedRows));\n    } else if (selectionOptions instanceof SingleSelectionOptions) {\n      const key = dataOptions.getRowKey(row);\n      if (checked === true) {\n        this.$selectedRows.set(new Map<Primitive, TData>([[key, row]]));\n      } else {\n        this.$selectedRows.set(new Map<Primitive, TData>());\n      }\n    }\n  }\n\n  // #endregion\n\n  // #region Line clamping\n\n  protected readonly $lineClampRows = signal<number>(1);\n  protected readonly $lineClampElementHeightPx = signal<number>(0);\n  private initializeLineClamp() {\n    const rowSizer = this.$dataRowSizer().nativeElement;\n    try {\n      const cellStyle = getComputedStyle(rowSizer);\n      const cellLineHeightString = cellStyle.lineHeight;\n      const cellLineHeightPx = cellLineHeightString.endsWith('px') ? parseFloat(cellLineHeightString) : parseFloat(cellLineHeightString) * parseFloat(cellStyle.fontSize);\n      const cellPaddingTop = parseFloat(cellStyle.paddingTop);\n      const cellPaddingBottom = parseFloat(cellStyle.paddingBottom);\n      const rowHeight = rowSizer.clientHeight - cellPaddingTop - cellPaddingBottom;\n\n      const rows = Math.max(Math.floor(rowHeight / cellLineHeightPx), 1);\n      this.$lineClampRows.set(rows);\n      this.$lineClampElementHeightPx.set(cellLineHeightPx * rows);\n    } catch (error: unknown) {\n      console.warn('Failed to initialize line clamp:', error);\n    }\n  }\n}\n","@let rowSelectionMode = $selectionOptions()?.selectionMode === 'row-and-checkbox';\n@let hasCheckboxColumn = $selectionOptions();\n<div class=\"table\" role=\"table\" [class.has-row-selection]=\"rowSelectionMode\">\n  <!--Data Row Sizer. This is a position fixed, 0px wide row with the given row height px. used to calculate the actual height of data rows prior to virtualizing-->\n  <div #dataSizer class=\"data-sizer\" [style.height]=\"$dataRowHeight()\"></div>\n  <!-- Column Row -->\n  <div #headerRow class=\"column-row\">\n    @if (hasCheckboxColumn) {\n      <div class=\"column-header pinned-left\" role=\"columnheader\" [style.width]=\"checkboxColWidth\" [style.minWidth]=\"checkboxColWidth\">\n        <div class=\"content check-select\">\n          @switch ($selectionOptions() | headerCheckboxMode) {\n            @case ('none') {}\n            @case ('selectNone') {\n              <tab-checkbox\n                [disabled]=\"$selectionMultiHeaderCheckboxSelected() !== 'partial'\"\n                [value]=\"$selectionMultiHeaderCheckboxSelected()\"\n                [valueAfterPartial]=\"false\"\n                (valueChange)=\"selectionMultiHeaderCheckboxSelectNoneChanged()\"\n              />\n            }\n            @case ('selectAll') {\n              <tab-checkbox\n                [loading]=\"dataManager.allDataInfo?.$status() === 'loading'\"\n                [disabled]=\"$selectionMultiHeaderCheckboxSelected() === false && dataManager.allDataInfo?.$status() !== 'success'\"\n                [value]=\"$selectionMultiHeaderCheckboxSelected()\"\n                [valueAfterPartial]=\"false\"\n                (valueChange)=\"selectionMultiHeaderCheckboxSelectAllChanged($event)\"\n              />\n            }\n          }\n        </div>\n      </div>\n    }\n    <!-- prettier-ignore -->\n    @for (def of $displayedColumnDefs(); let index = $index; let count = $count; let first = $first; let last = $last; let even = $even; let odd = $odd; track def.id) {\n            @let headerContext = def.col | headerContext: index : first : last : even : odd : count;\n            <!-- @let headerTooltip = def.col.$headerTooltip(); -->\n            <div\n                #header\n                class=\"column-header\"\n                role=\"columnheader\"\n                [attr.data-column-id]=\"def.id\"\n                [attr.data-column-index]=\"index\"\n                [attr.data-column-count]=\"count\"\n                [attr.data-column-first]=\"first\"\n                [attr.data-column-last]=\"last\"\n                [attr.data-column-even]=\"even\"\n                [attr.data-column-odd]=\"odd\"\n                [style.minWidth]=\"def.col.$minWidth() | colWidth: 'width'\"\n                [style.maxWidth]=\"def.col.$maxWidth() | colWidth: 'width'\"\n                [style.width]=\"def.col.$width() | colWidth: 'widthUnitsOnly'\"\n                [style.flexGrow]=\"def.col.$width() | colWidth: 'flexGrowOnly'\"\n                [class.resizeable]=\"def.col.$resizable()\"\n                [class.sortable]=\"def.col.$sortable()\"\n                [class.pinned-left]=\"def.pinnedLeft\"\n                [style.left]=\"!def.pinnedLeft ? 'initial': hasCheckboxColumn ? checkboxColWidth: '0'\"\n                [class.pinned-right]=\"def.pinnedRight\"\n                [ngClass]=\"headerContext.$implicit| headerClass\"\n                [colRenderedWidth]=\"def.id\"\n            >\n            <!-- [tooltipFullArgs]=\"headerTooltip | headerTooltip:headerContext.$implicit:def.col.$showAutoHeaderTooltip():defaultHeaderTooltipTemplate:\" -->\n                <div class=\"content\" [style.padding]=\"$headerPadding()\">\n                    <button\n                        class=\"header-button\"\n                        color=\"plain\"\n                        layout=\"small-icon\"\n                        tooltip\n                        tooltipArgsMode=\"lazy\"\n                        [class.not-sortable]=\"!def.col.$sortable()\"\n                        [tabindex]=\"def.col.$sortable() ? '0' : '-1'\"\n                        [tooltipLazyArgs]=\"def.col | headerTooltip:self:headerContext.$implicit:defaultHeaderTooltipTemplate:{\n                            sortMode: $sortMode(),\n                            sortable: def.col.$sortable(),\n                            sortOrder: def.col.$sortOrder(),\n                            currentSort: $sort() | sortInfo: def.id : def.col.$propertyName(),\n                            allSorts: $sort()\n                        }\"\n                        (click)=\"onColumnHeaderClick($event, def.col)\"\n                    >\n                        <div class=\"content\">\n                            <div class=\"text\">\n                                @if (def.col.$header()) {\n                                    <ng-container [ngTemplateOutlet]=\"def.col.$header()!.templateRef\" [ngTemplateOutletContext]=\"headerContext\" />\n                                }\n                            </div>\n                            @if (def.col.$sortable()) {\n                                <div class=\"sort-indicator\">\n                                    @let currentSort = $sort() | sortInfo: def.id : def.col.$propertyName();\n                                    @switch (currentSort?.info?.direction) {\n                                        @case ('asc') {\n                                            <tab-icon value=\"arrow_upward\" />\n                                        }\n                                        @case ('desc') {\n                                            <tab-icon value=\"arrow_downward\" />\n                                        }\n                                        @default {\n                                            <tab-icon class=\"no-sort\" value=\"swap_vert\" />\n                                        }\n                                    }\n                                    @if ($sortMode() === 'multi' && currentSort) {\n                                        <span class=\"sort-order\">\n                                            {{ currentSort.index + 1 }}\n                                        </span>\n                                    }\n                                </div>\n                            }\n                        </div>\n                    </button>\n                </div>\n                @if (def.col.$resizable()) {\n                    <div class=\"resizer\" [resizerFor]=\"header\" [enabled]=\"def.col.$resizable()\" \n                    [class.enabled]=\"def.col.$resizable()\"\n                    [class.last]=\"last\"\n                    >\n                        <div class=\"line\"></div>\n                    </div>\n                }\n               \n            </div>\n\n            <ng-template #defaultHeaderTooltipTemplate let-ctx [tabHeaderTooltipDef]=\"self\">\n                <div class=\"default-header-tooltip\">\n                    <div class=\"column-name\">\n                        <ng-container [ngTemplateOutlet]=\"ctx.headerTemplate\" [ngTemplateOutletContext]=\"{ $implicit: ctx }\" />\n                    </div>\n\n                    @if (ctx.sortable) {\n                        <div class=\"sort\">\n                            @if (ctx.currentSort) {\n                                <div class=\"current\">\n                                    Currently sorted in\n                                    <b>{{ ctx.currentSort.info.direction === 'asc' ? 'Ascending' : 'Descending' }} order.</b>\n                                </div>\n                            }\n                            @let nextSort = !ctx.currentSort ? ctx.sortOrder[0] : ctx.currentSort.info.direction === ctx.sortOrder[1] ? undefined : ctx.currentSort.info.direction === 'asc' ? 'desc' : 'asc';\n                            @let isSubSort = ctx.currentSort && ctx.currentSort.index > 0;\n                            @let addMultiSort = ctx.sortMode === 'multi' && !ctx.currentSort && ctx.allSorts.length > 0;\n                            @if (addMultiSort) {\n                                <div class=\"multi-sort\">\n                                    <b>Shift + Click</b>\n                                    to add add to multi-sort in\n                                    <b>{{ nextSort === 'asc' ? 'Ascending' : 'Descending' }}</b>\n                                    order.\n                                </div>\n                            }\n                            @if (isSubSort) {\n                                <div class=\"next\">\n                                    @if (!nextSort) {\n                                        <b>Shift + Click</b>\n                                        to remove sorting this column from multi-sort.\n                                    } @else {\n                                        <b>Shift + Click</b>\n                                        to change sorting to\n                                        <b>{{ nextSort === 'asc' ? 'Ascending' : 'Descending' }}</b>\n                                        order.\n                                    }\n                                </div>\n                                <div class=\"next\">\n                                    @if (!nextSort) {\n                                        Click to clear all sorting.\n                                    } @else {\n                                        Click to clear multi-sort and change to\n                                        <b>{{ nextSort === 'asc' ? 'Ascending' : 'Descending' }}</b>\n                                        order.\n                                    }\n                                </div>\n                            } @else {\n                                <div class=\"next\">\n                                    @if (!nextSort) {\n                                        Click to remove sorting.\n                                    } @else {\n                                        Click to sort in\n                                        <b>{{ nextSort === 'asc' ? 'Ascending' : 'Descending' }}</b>\n                                        order.\n                                    }\n                                </div>\n                            }\n                        </div>\n                    }\n                </div>\n            </ng-template>\n        }\n  </div>\n\n  <div class=\"data-rows\" [class.striped]=\"$striped()\">\n    @let dmBlocks = dataManager.$blocks();\n    @if (dmBlocks.blocks.length === 0) {\n      @let _noDataTemplate = $noDataTemplate();\n      @if (_noDataTemplate === 'default') {\n        <ng-container [ngTemplateOutlet]=\"defaultNoData\" />\n      } @else if (typeof _noDataTemplate === 'string') {\n        <ng-container *ngTemplateOutlet=\"defaultNoData; context: { $implicit: _noDataTemplate }\" />\n      } @else {\n        <ng-container [ngTemplateOutlet]=\"_noDataTemplate\" />\n      }\n\n      <ng-template #defaultNoData let-message>\n        <div class=\"no-data\" [style.padding]=\"$dataPadding()\">\n          <span>{{ message ?? 'No data available' }}</span>\n        </div>\n      </ng-template>\n    } @else {\n      <div class=\"virtualize pre\" [style.height]=\"`${dmBlocks.prePixels}px`\"></div>\n\n      <!-- prettier-ignore-start -->\n      @for (block of dmBlocks.blocks; track block.id) {\n        <!-- prettier-ignore -->\n        @for (r of block.$data(); let index = $index; let count = $count; let first = $first; let last = $last; let even = $even; let odd = $odd; track r.key) {\n                    <!-- prettier-ignore-end -->\n                    <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n                    <div\n                        class=\"row\"\n                        role=\"row\"\n                        [style.height]=\"$dataRowHeight()\"\n                        [class.even]=\"(block.offset + index) % 2 === 0\"\n                        [class.selected]=\"r.data | rowSelected: $selectedRows() : $dataOptions()\"\n                        (click)=\"rowClicked(r.data, $event)\"\n                    >\n                        @if (hasCheckboxColumn) {\n                            <div class=\"cell check-select pinned-left\" role=\"cell\" [style.width]=\"checkboxColWidth\" [style.minWidth]=\"checkboxColWidth\">\n                                @if (block.$status() === 'success') {\n                                    <tab-checkbox\n                                    [value]=\"r.data | rowSelected: $selectedRows() : $dataOptions()\"\n                                    (valueChange)=\"checkboxSelectChange(r.data, $event)\"\n                                    (click)=\"checkboxClicked($event)\" />\n                                }\n                            </div>\n                        }\n                        <!-- prettier-ignore -->\n                        @for (def of $displayedColumnDefs(); let colindex = $index; let colcount = $count; let colfirst = $first; let collast = $last; let coleven = $even; let colodd = $odd; track def.id) {\n                            <!-- prettier-ignore-end -->\n                            @let cellContext =\n                            r.data\n                                    | cellContext\n                                        : $lineClampRows()\n                                        : def.col\n                                        : block.offset + index\n                                        : block.offset === 0 && first\n                                        : block.offset + index === dataManager.totalRowCount\n                                        : (block.offset + index) % 2 === 0\n                                        : (block.offset + index) % 2 === 1\n                                        : dataManager.totalRowCount\n                                        : colindex\n                                        : colfirst\n                                        : collast\n                                        : coleven\n                                        : colodd\n                                        : colcount;\n\n                            \n                            <div\n                                #cell\n                                class=\"cell\"\n                                role=\"cell\"\n                                tooltip\n                                tooltipArgsMode=\"lazy\"\n                                [attr.data-column-id]=\"def.id\"\n                                [attr.data-column-index]=\"block.offset + index\"\n                                [attr.data-column-count]=\"colcount\"\n                                [attr.data-column-first]=\"colfirst\"\n                                [attr.data-column-last]=\"collast\"\n                                [attr.data-column-even]=\"coleven\"\n                                [attr.data-column-odd]=\"colodd\"\n                                [class.pinned-left]=\"def.pinnedLeft\"\n                                [style.left]=\"!def.pinnedLeft ? 'initial': hasCheckboxColumn ? checkboxColWidth: '0'\"\n                                [class.pinned-right]=\"def.pinnedRight\"\n                                [style.padding]=\"$dataPadding()\"\n                                [style.width]=\"$columnWidthDirectives() | cellWidth: def.id : $dataPadding() | async\"\n                                [ngClass]=\"cellContext.$implicit | cellClass\"\n                                [tooltipLazyArgs]=\"cell | cellTooltip: def.col: cellContext.$implicit: block\"\n                            >\n                                @switch (block.$status()) {\n                                    @case ('loading') {\n                                        <div class=\"status loader\"></div>\n                                    }\n                                    @case ('error') {\n                                        <div class=\"status error\"></div>\n                                    }\n                                    @case ('success') {\n                                        @let cellDef = def.col.$cell();\n                                        @if (cellDef.$textClamping()) {\n                                            <div class=\"line-clamp\"\n                                                [style.height]=\"$lineClampElementHeightPx()\"\n                                                [style.-webkit-line-clamp]=\"$lineClampRows()\"                                       >\n                                                <ng-container [ngTemplateOutlet]=\"cellDef.templateRef\" [ngTemplateOutletContext]=\"cellContext\" />\n                                            </div>\n                                        } @else {\n                                            <ng-container [ngTemplateOutlet]=\"cellDef.templateRef\" [ngTemplateOutletContext]=\"cellContext\" />\n                                        }\n                                        \n                                    }\n                                }\n                            </div>\n                        }\n                    </div>\n                }\n      }\n      <div class=\"virtualize post\" [style.height]=\"`${dmBlocks.postPixels}px`\"></div>\n    }\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TableComponent } from './table.component';\nimport { HeaderDefDirective } from './defs/header-def/header-def.directive';\nimport { ColumnDefDirective } from './defs/column-def/column-def.directive';\nimport { CellDefDirective } from './defs/cell-def/cell-def.directive';\nimport { HeaderClassPipe } from './defs/header-def/header-class.pipe';\nimport { HeaderContextPipe } from './defs/header-def/header-context.pipe';\nimport { CellContextPipe } from './defs/cell-def/cell-context.pipe';\nimport { CellClassPipe } from './defs/cell-def/cell-class.pipe';\nimport { SortInfoPipe } from './sorting/sort-info-pipe';\nimport { ColWidthPipe } from './column-widths/col-width.pipe';\nimport { ColRenderedWidthDirective } from './column-widths/col-rendered-width.directive';\nimport { CellWidthPipe } from './column-widths/cell-width.pipe';\nimport { ResizerDirective } from './column-widths/resizer.directive';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\nimport { TableauUiButtonModule } from 'tableau-ui-angular/button';\nimport { TableauUiTooltipModule } from 'tableau-ui-angular/tooltip';\nimport { RowSelectedPipe } from './selection/row-selected.pipe';\nimport { TableauUiCheckboxModule } from 'tableau-ui-angular/checkbox';\nimport { HeaderCheckboxModePipe } from './selection/header-checkbox-mode.pipe';\nimport { HeaderToolipDefDirective } from './defs/header-def/header-toolip-def.directive';\n\nimport { CellToolipDefDirective } from './defs/cell-def/cell-toolip-def.directive';\n\nimport { HeaderTooltipPipe } from './defs/header-def/header-tooltip.pipe';\nimport { CellTooltipPipe } from './defs/cell-def/cell-tooltip.pipe';\n\n@NgModule({\n  imports: [CommonModule, TableauUiIconModule, TableauUiButtonModule, TableauUiTooltipModule, TableauUiCheckboxModule],\n  declarations: [\n    TableComponent,\n    HeaderDefDirective,\n    HeaderToolipDefDirective,\n    HeaderTooltipPipe,\n    HeaderContextPipe,\n    HeaderClassPipe,\n    ColumnDefDirective,\n    CellDefDirective,\n    CellContextPipe,\n    CellClassPipe,\n    CellToolipDefDirective,\n    CellTooltipPipe,\n    SortInfoPipe,\n    ColWidthPipe,\n    ColRenderedWidthDirective,\n    CellWidthPipe,\n    ResizerDirective,\n    HeaderCheckboxModePipe,\n    RowSelectedPipe,\n  ],\n  exports: [TableComponent, HeaderDefDirective, HeaderToolipDefDirective, ColumnDefDirective, CellDefDirective, CellToolipDefDirective, SortInfoPipe],\n})\nexport class TableauUiTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i6.HeaderToolipDefDirective","i7.ColRenderedWidthDirective","i8.ResizerDirective","i9.HeaderTooltipPipe","i10.HeaderContextPipe","i11.HeaderClassPipe","i12.CellContextPipe","i13.CellClassPipe","i14.CellTooltipPipe","i15.SortInfoPipe","i16.ColWidthPipe","i17.CellWidthPipe","i18.HeaderCheckboxModePipe","i19.RowSelectedPipe"],"mappings":"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"}