{"version":3,"file":"bimeister-pupakit.table.mjs","sources":["../../src/declarations/enums/table-column-sorting.enum.ts","../../src/declarations/events/table-column.events.ts","../../src/declarations/enums/table-column-pin.enum.ts","../../src/components/external-predefined/table-body-cell/table-body-cell.component.ts","../../src/components/external-predefined/table-body-cell/table-body-cell.component.html","../../src/declarations/type-guards/is-table-column-sorting-options.type-guard.ts","../../src/components/external-predefined/table-header-cell/table-header-cell.component.ts","../../src/components/external-predefined/table-header-cell/table-header-cell.component.html","../../src/components/external-predefined/table-skeleton/table-skeleton.component.ts","../../src/components/external-predefined/table-skeleton/table-skeleton.component.html","../../src/declarations/events/table-row.events.ts","../../src/services/table-templates.service.ts","../../src/declarations/classes/table-column.class.ts","../../src/declarations/classes/table-row.class.ts","../../src/declarations/classes/table-body-row.class.ts","../../src/components/system/table-body-cell-container/table-body-cell-container.component.ts","../../src/components/system/table-body-cell-container/table-body-cell-container.component.html","../../src/services/table-scrollbars.service.ts","../../src/declarations/enums/table-row-type.enum.ts","../../src/components/system/table-body-row-container/table-body-row-container.component.ts","../../src/components/system/table-body-row-container/table-body-row-container.component.html","../../src/directives/table-header-cell-template.directive.ts","../../src/directives/table-cell-template.directive.ts","../../src/components/system/table-column-template/table-column-template.component.ts","../../src/components/system/table-column-template/table-column-template.component.html","../../src/declarations/type-guards/is-table-cell-html-element.type-guard.ts","../../src/services/table-columns-intersection.service.ts","../../src/components/system/table-header-cell-container/table-header-cell-container.component.ts","../../src/components/system/table-header-cell-container/table-header-cell-container.component.html","../../src/components/system/table-header-row-container/table-header-row-container.component.ts","../../src/components/system/table-header-row-container/table-header-row-container.component.html","../../src/components/system/table-placeholder-row-container/table-placeholder-row-container.component.ts","../../src/components/system/table-placeholder-row-container/table-placeholder-row-container.component.html","../../src/declarations/classes/table-body-rows-data-source.class.ts","../../src/declarations/events/table.events.ts","../../src/declarations/events/table-feature.events.ts","../../src/declarations/classes/table-data-display-collection.class.ts","../../src/declarations/classes/table-controller.class.ts","../../src/declarations/classes/table-internal-system-features/table-common-feature.class.ts","../../src/declarations/classes/table-internal-system-features/table-dnd-feature.class.ts","../../src/declarations/classes/table-internal-system-features/table-hover-feature.class.ts","../../src/declarations/classes/table-column-size-state.class.ts","../../src/declarations/classes/table-internal-system-features/table-resize-feature.class.ts","../../src/declarations/classes/table-internal-system-features/table-scroll-feature.class.ts","../../src/components/system/table/table.component.ts","../../src/components/system/table/table.component.html","../../src/table.module.ts","../../src/declarations/classes/table-paged-data-producer.class.ts","../../src/declarations/classes/table-external-predefined-features/table-sorting-feature.class.ts"],"sourcesContent":["export enum TableColumnSorting {\n  None = 'none',\n  Asc = 'asc',\n  Desc = 'desc',\n}\n","import { BusEventBase } from '@bimeister/pupakit.common';\nimport { getUuid, Nullable } from '@bimeister/utilities';\nimport { TableColumnSorting } from '../enums/table-column-sorting.enum';\n\nexport namespace TableColumnEvents {\n  export class TableColumnEventBase extends BusEventBase<unknown> {\n    public readonly scope: Nullable<string> = null;\n    public readonly id: string = getUuid();\n    public readonly type: Nullable<string> = null;\n    public readonly payload: unknown = null;\n\n    constructor(public readonly fromId: Nullable<string> = null) {\n      super();\n    }\n  }\n\n  export class HoverChanged extends TableColumnEventBase {\n    constructor(public readonly isHovered: boolean) {\n      super();\n    }\n  }\n\n  export class CurrentResizableChanged extends TableColumnEventBase {\n    constructor(public readonly isCurrentResizable: boolean) {\n      super();\n    }\n  }\n\n  export class WidthChanged extends TableColumnEventBase {\n    constructor(public readonly widthPx: number) {\n      super();\n    }\n  }\n\n  export class GetCurrentWidth extends TableColumnEventBase {\n    constructor() {\n      super();\n    }\n  }\n\n  export class CurrentWidthResponse extends TableColumnEventBase {\n    constructor(public readonly fromId: string, public readonly widthPx: number) {\n      super();\n    }\n  }\n\n  export class CurrentDraggableChanged extends TableColumnEventBase {\n    constructor(public readonly isCurrentDraggable: boolean) {\n      super();\n    }\n  }\n\n  export class CurrentDragTargetChanged extends TableColumnEventBase {\n    constructor(public readonly isCurrentDragTarget: boolean) {\n      super();\n    }\n  }\n\n  export class SortingChanged extends TableColumnEventBase {\n    constructor(public readonly sorting: TableColumnSorting) {\n      super();\n    }\n  }\n\n  export class GetCurrentSorting extends TableColumnEventBase {\n    constructor() {\n      super();\n    }\n  }\n\n  export class CurrentSortingResponse extends TableColumnEventBase {\n    constructor(public readonly fromId: string, public readonly sorting: TableColumnSorting) {\n      super();\n    }\n  }\n}\n","export enum TableColumnPin {\n  None,\n  Left,\n  Right,\n}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { ComponentChange, ComponentChanges } from '@bimeister/pupakit.common';\nimport { isNil, Nullable } from '@bimeister/utilities';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { TableColumnRef } from '../../../declarations/interfaces/table-column-ref.interface';\n\n@Component({\n  selector: 'pupa-table-body-cell',\n  templateUrl: './table-body-cell.component.html',\n  styleUrls: ['./table-body-cell.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableBodyCellComponent implements OnChanges {\n  @Input() public clickable: boolean = false;\n\n  @Input() public column: Nullable<TableColumnRef>;\n  private readonly column$: ReplaySubject<TableColumnRef> = new ReplaySubject<TableColumnRef>(1);\n\n  public readonly isCurrentDraggable$: Observable<boolean> = this.column$.pipe(\n    switchMap((column: TableColumnRef) => column.isCurrentDraggable$)\n  );\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.processColumnChanges(changes.column);\n  }\n\n  private processColumnChanges(change: Nullable<ComponentChange<this, TableColumnRef>>): void {\n    const value: Nullable<TableColumnRef> = change?.currentValue;\n\n    if (isNil(value)) {\n      return;\n    }\n\n    this.column$.next(value);\n  }\n}\n","<div\n  class=\"table-body-cell\"\n  [class.table-body-cell_clickable]=\"clickable\"\n  [class.table-body-cell_current-draggable]=\"isCurrentDraggable$ | async\"\n>\n  <div class=\"table-body-cell__content\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { isNil } from '@bimeister/utilities';\nimport { TableColumnSortingOptions } from '../interfaces/table-column-sorting-options.interface';\n\nexport function isTableColumnSortingOptions(value: unknown): value is TableColumnSortingOptions {\n  if (isNil(value)) {\n    return false;\n  }\n\n  const typedValue: TableColumnSortingOptions = value as TableColumnSortingOptions;\n\n  const hasOneOfFields: boolean =\n    typedValue.sortable !== undefined ||\n    typedValue.isSortingNoneAvailable !== undefined ||\n    typedValue.defaultState !== undefined;\n\n  return hasOneOfFields;\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Renderer2,\n  RendererStyleFlags2,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { filterNotNil, isNil, Nullable, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { BehaviorSubject, merge, Observable, Subscription } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { TableColumnRef } from '../../../declarations/interfaces/table-column-ref.interface';\nimport { isTableColumnSortingOptions } from '../../../declarations/type-guards/is-table-column-sorting-options.type-guard';\nimport { TableColumnEvents } from '../../../declarations/events/table-column.events';\nimport { TableColumnSorting } from '../../../declarations/enums/table-column-sorting.enum';\nimport { ComponentChange, ComponentChanges } from '@bimeister/pupakit.common';\n\n@Component({\n  selector: 'pupa-table-header-cell',\n  templateUrl: './table-header-cell.component.html',\n  styleUrls: ['./table-header-cell.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeaderCellComponent implements OnChanges, OnDestroy {\n  private readonly subscription: Subscription = new Subscription();\n\n  @Input() public column: Nullable<TableColumnRef>;\n  private readonly column$: BehaviorSubject<TableColumnRef> = new BehaviorSubject<TableColumnRef>(null);\n\n  @Input() public isDndClone: boolean = false;\n\n  public readonly isCurrentDraggable$: Observable<boolean> = this.column$.pipe(\n    filterNotNil(),\n    switchMap((column: TableColumnRef) => column.isCurrentDraggable$)\n  );\n\n  public readonly isSortable$: Observable<boolean> = this.column$.pipe(\n    filterNotNil(),\n    map((column: TableColumnRef) => {\n      const featureOptions: unknown = column.definition.featureOptions;\n\n      return isTableColumnSortingOptions(featureOptions) ? featureOptions.sortable : false;\n    })\n  );\n\n  private readonly sorting$: Observable<TableColumnSorting> = this.column$.pipe(\n    filterNotNil(),\n    switchMap((column: TableColumnRef) =>\n      merge(\n        column.dispatchEvent(new TableColumnEvents.GetCurrentSorting(), TableColumnEvents.CurrentSortingResponse),\n        column.listenEvent(TableColumnEvents.SortingChanged)\n      )\n    ),\n    map((event: TableColumnEvents.CurrentSortingResponse | TableColumnEvents.SortingChanged) => event.sorting),\n    shareReplayWithRefCount()\n  );\n\n  public readonly isIconVisible$: Observable<boolean> = this.sorting$.pipe(\n    map((sorting: TableColumnSorting) => sorting !== TableColumnSorting.None)\n  );\n\n  public readonly iconName$: Observable<string> = this.sorting$.pipe(\n    map((sorting: TableColumnSorting) =>\n      sorting === TableColumnSorting.Asc ? 'app-arrow-full-bot' : 'app-arrow-full-top'\n    )\n  );\n\n  constructor(@Inject(DOCUMENT) private readonly document: Document, private readonly renderer: Renderer2) {}\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.processColumnChanges(changes?.column);\n  }\n\n  public ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  public processPress(): void {\n    this.processPanStart();\n  }\n\n  public processPanStart(): void {\n    this.renderer.setStyle(this.document.body, 'cursor', 'col-resize', RendererStyleFlags2.Important);\n  }\n\n  public processPanEnd(): void {\n    this.renderer.setStyle(this.document.body, 'cursor', null);\n  }\n\n  public processPressup(): void {\n    this.processPanEnd();\n  }\n\n  private processColumnChanges(change: Nullable<ComponentChange<this, TableColumnRef>>): void {\n    const value: Nullable<TableColumnRef> = change?.currentValue;\n\n    if (isNil(value)) {\n      return;\n    }\n\n    this.column$.next(value);\n  }\n}\n","<div\n  *pupaLet=\"\n    { isSortable: isSortable$ | async, isIconVisible: isIconVisible$ | async };\n    let isSortable = isSortable;\n    let isIconVisible = isIconVisible\n  \"\n  class=\"header-cell\"\n  [class.header-cell_sortable]=\"isSortable\"\n  [class.header-cell_sortable-with-icon]=\"isSortable && isIconVisible\"\n  [class.header-cell_dnd-clone]=\"isDndClone\"\n  [class.header-cell_current-draggable]=\"isCurrentDraggable$ | async\"\n>\n  <span class=\"header-cell__text\"> <ng-content></ng-content> </span>\n\n  <div class=\"header-cell__sort-wrapper\" *ngIf=\"isSortable && isIconVisible\">\n    <span class=\"header-cell__sort\">\n      <pupa-icon [name]=\"iconName$ | async\"></pupa-icon>\n    </span>\n  </div>\n</div>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n  selector: 'pupa-table-skeleton',\n  templateUrl: './table-skeleton.component.html',\n  styleUrls: ['./table-skeleton.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableSkeletonComponent {}\n","<div class=\"skeleton\">\n  <div class=\"skeleton__stick\"></div>\n</div>\n","import { BusEventBase } from '@bimeister/pupakit.common';\nimport { getUuid, Nullable } from '@bimeister/utilities';\n\nexport namespace TableRowEvents {\n  export abstract class TableRowEventBase extends BusEventBase<unknown> {\n    public readonly scope: Nullable<string> = null;\n    public readonly id: string = getUuid();\n    public readonly type: Nullable<string> = null;\n    public readonly payload: unknown = null;\n\n    constructor(public readonly fromId: Nullable<string> = null) {\n      super();\n    }\n  }\n\n  export class HoverChanged extends TableRowEventBase {\n    constructor(public readonly isHovered: boolean) {\n      super();\n    }\n  }\n}\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { TableHeaderCellContext } from '../declarations/interfaces/table-header-cell-context.interface';\nimport { TableBodyCellContext } from '../declarations/interfaces/table-body-cell-context.interface';\nimport { isNil, Nullable } from '@bimeister/utilities';\n\ninterface ColumnTemplates<T> {\n  headerCell: Nullable<TemplateRef<TableHeaderCellContext>>;\n  bodyCell: Nullable<TemplateRef<TableBodyCellContext<T>>>;\n}\n\nconst HEADER_DEFAULT_TEMPLATES_ERROR_TEXT: string = '[TableTemplatesService] default template in null for header cell';\nconst BODY_DEFAULT_TEMPLATES_ERROR_TEXT: string = '[TableTemplatesService] default template is null for body cell';\n\n@Injectable()\nexport class TableTemplatesService<T> {\n  private defaultTemplates: Nullable<ColumnTemplates<T>> = null;\n  private readonly columnIdToTemplatesMap: Map<string, ColumnTemplates<T>> = new Map<string, ColumnTemplates<T>>();\n\n  public registerDefaultTemplates(templates: ColumnTemplates<T>): void {\n    this.defaultTemplates = templates;\n  }\n\n  public registerTemplates(columnType: string, templates: ColumnTemplates<T>): void {\n    this.columnIdToTemplatesMap.set(columnType, templates);\n  }\n\n  public getHeaderCellTemplateByType(columnType: string): TemplateRef<TableHeaderCellContext> {\n    if (isNil(this.defaultTemplates)) {\n      throw new Error(HEADER_DEFAULT_TEMPLATES_ERROR_TEXT);\n    }\n    return this.columnIdToTemplatesMap.get(columnType)?.headerCell ?? this.defaultTemplates.headerCell;\n  }\n\n  public getBodyCellTemplateByType(columnType: string): TemplateRef<TableBodyCellContext<T>> {\n    if (isNil(this.defaultTemplates)) {\n      throw new Error(BODY_DEFAULT_TEMPLATES_ERROR_TEXT);\n    }\n    return this.columnIdToTemplatesMap.get(columnType)?.bodyCell ?? this.defaultTemplates.bodyCell;\n  }\n}\n","import { Type } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterByInstanceOf, isNil, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { defer, merge, Observable } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\nimport { TableColumnEvents } from '../events/table-column.events';\nimport { TableColumnDefinition } from '../interfaces/table-column-definition.interface';\nimport { TableColumnRef } from '../interfaces/table-column-ref.interface';\n\nexport class TableColumn implements TableColumnRef {\n  private readonly eventBus: EventBus = new EventBus();\n\n  public index: number = 0;\n  public definition: TableColumnDefinition;\n\n  public readonly isHovered$: Observable<boolean> = this.listenEvent(TableColumnEvents.HoverChanged).pipe(\n    map((event: TableColumnEvents.HoverChanged) => event.isHovered),\n    shareReplayWithRefCount()\n  );\n\n  public readonly widthPx$: Observable<number> = defer(() =>\n    merge(\n      this.dispatchEvent(new TableColumnEvents.GetCurrentWidth(), TableColumnEvents.CurrentWidthResponse),\n      this.listenEvent(TableColumnEvents.WidthChanged)\n    )\n  ).pipe(\n    map((event: TableColumnEvents.CurrentWidthResponse | TableColumnEvents.WidthChanged) => event.widthPx),\n    shareReplayWithRefCount()\n  );\n\n  public readonly isCurrentResizable$: Observable<boolean> = this.listenEvent(\n    TableColumnEvents.CurrentResizableChanged\n  ).pipe(\n    map((event: TableColumnEvents.CurrentResizableChanged) => event.isCurrentResizable),\n    shareReplayWithRefCount()\n  );\n\n  public readonly isCurrentDraggable$: Observable<boolean> = this.listenEvent(\n    TableColumnEvents.CurrentDraggableChanged\n  ).pipe(\n    map((event: TableColumnEvents.CurrentDraggableChanged) => event.isCurrentDraggable),\n    shareReplayWithRefCount()\n  );\n\n  public readonly isCurrentDragTarget$: Observable<boolean> = this.listenEvent(\n    TableColumnEvents.CurrentDragTargetChanged\n  ).pipe(\n    map((event: TableColumnEvents.CurrentDragTargetChanged) => event.isCurrentDragTarget),\n    shareReplayWithRefCount()\n  );\n\n  public dispatchEvent(event: TableColumnEvents.TableColumnEventBase): Observable<unknown>;\n\n  public dispatchEvent<R extends TableColumnEvents.TableColumnEventBase>(\n    event: TableColumnEvents.TableColumnEventBase,\n    response: Type<R>\n  ): Observable<R>;\n\n  public dispatchEvent<R extends TableColumnEvents.TableColumnEventBase>(\n    event: TableColumnEvents.TableColumnEventBase,\n    response?: Type<R>\n  ): Observable<R> | Observable<unknown> {\n    if (isNil(response)) {\n      return this.eventBus.dispatch(event);\n    }\n\n    return this.eventBus.dispatch(event).pipe(\n      filter(\n        (responseEvent: unknown): responseEvent is R =>\n          responseEvent instanceof response && responseEvent.fromId === event.id\n      ),\n      take(1)\n    );\n  }\n\n  public listenEvent<T extends TableColumnEvents.TableColumnEventBase>(event: Type<T>): Observable<T> {\n    return this.eventBus.listen().pipe(filterByInstanceOf(event));\n  }\n}\n","import { Type } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterByInstanceOf, getUuid } from '@bimeister/utilities';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableRowEvents } from '../events/table-row.events';\nimport { TableRowRef } from '../interfaces/table-row-ref.interface';\n\nexport class TableRow implements TableRowRef {\n  public readonly id: string = getUuid();\n  public readonly eventBus: EventBus = new EventBus();\n\n  public readonly isHovered$: Observable<boolean> = this.listenEvent(TableRowEvents.HoverChanged).pipe(\n    map((event: TableRowEvents.HoverChanged) => event.isHovered)\n  );\n\n  public listenEvent<T extends TableRowEvents.TableRowEventBase>(event: Type<T>): Observable<T> {\n    return this.eventBus.listen().pipe(filterByInstanceOf(event));\n  }\n\n  public dispatch(event: TableRowEvents.TableRowEventBase): void {\n    this.eventBus.dispatch(event);\n  }\n}\n","import { TableRow } from './table-row.class';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableBodyRowRef } from '../interfaces/table-body-row-ref.interface';\n\nexport class TableBodyRow<T> extends TableRow implements TableBodyRowRef<T> {\n  public readonly isSelected$: Observable<boolean> = this.selectedIds$.pipe(\n    map((selectedIds: Set<string>) => selectedIds.has(this.id))\n  );\n\n  constructor(\n    public readonly id: string,\n    public readonly data: T,\n    private readonly selectedIds$: Observable<Set<string>>\n  ) {\n    super();\n  }\n}\n","import {\n  Component,\n  ViewEncapsulation,\n  ChangeDetectionStrategy,\n  TemplateRef,\n  Input,\n  OnChanges,\n  ViewContainerRef,\n  ViewChild,\n  AfterViewChecked,\n} from '@angular/core';\nimport { TableTemplatesService } from '../../../services/table-templates.service';\nimport { isNil, Nullable } from '@bimeister/utilities';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableBodyRow } from '../../../declarations/classes/table-body-row.class';\nimport { TableBodyCellContext } from '../../../declarations/interfaces/table-body-cell-context.interface';\nimport { ComponentChange, ComponentChanges } from '@bimeister/pupakit.common';\n\n@Component({\n  selector: 'pupa-table-body-cell-container',\n  templateUrl: './table-body-cell-container.component.html',\n  styleUrls: ['./table-body-cell-container.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableBodyCellContainerComponent<T> implements OnChanges, AfterViewChecked {\n  @ViewChild('viewContainerRef', { read: ViewContainerRef }) public viewContainerRef?: Nullable<ViewContainerRef>;\n\n  @Input() public column: TableColumn;\n  @Input() public row: TableBodyRow<T>;\n\n  private lastRowValue: Nullable<TableBodyRow<T>> = null;\n  private lastColumnValue: Nullable<TableColumn> = null;\n\n  public templateRef: TemplateRef<TableBodyCellContext<T>>;\n  public templateContext: TableBodyCellContext<T> = {\n    $implicit: null,\n    column: null,\n  };\n\n  constructor(private readonly tableTemplatesService: TableTemplatesService<T>) {}\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.processColumnChanges(changes?.column);\n    this.processRowChanges(changes?.row);\n  }\n\n  public ngAfterViewChecked(): void {\n    this.rerenderIfOptionIsTrue();\n  }\n\n  private processColumnChanges(change: Nullable<ComponentChange<this, TableColumn>>): void {\n    const value: Nullable<TableColumn> = change?.currentValue;\n    if (isNil(value)) {\n      return;\n    }\n    this.templateRef = this.tableTemplatesService.getBodyCellTemplateByType(value.definition.type);\n    this.templateContext = {\n      ...this.templateContext,\n      column: value,\n    };\n  }\n\n  private processRowChanges(change: Nullable<ComponentChange<this, TableBodyRow<T>>>): void {\n    const value: Nullable<TableBodyRow<T>> = change?.currentValue;\n    if (isNil(value)) {\n      return;\n    }\n    this.templateContext = {\n      ...this.templateContext,\n      $implicit: value,\n    };\n  }\n\n  private rerenderIfOptionIsTrue(): void {\n    const isDataChanged: boolean =\n      this.lastRowValue?.id !== this.row.id || this.lastColumnValue?.definition?.id !== this.column.definition.id;\n\n    if (!isDataChanged) {\n      return;\n    }\n\n    this.lastRowValue = this.row;\n    this.lastColumnValue = this.column;\n\n    const isRerenderOptionActive: boolean = this.column.definition.rerenderOnRowOrColumnChanges;\n\n    if (!isRerenderOptionActive) {\n      return;\n    }\n\n    this.rerender();\n  }\n\n  private rerender(): void {\n    this.viewContainerRef?.clear();\n    this.viewContainerRef?.createEmbeddedView(this.templateRef, this.templateContext);\n  }\n}\n","<ng-container\n  *ngIf=\"!column.definition.rerenderOnRowOrColumnChanges\"\n  [ngTemplateOutlet]=\"templateRef\"\n  [ngTemplateOutletContext]=\"templateContext\"\n></ng-container>\n\n<ng-container *ngIf=\"column.definition.rerenderOnRowOrColumnChanges\" #viewContainerRef></ng-container>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class TableScrollbarsService {\n  public readonly isHorizontalVisible$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  public readonly isVerticalVisible$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n}\n","export enum TableRowType {\n  Header = 'Header',\n  Body = 'Body',\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, TrackByFunction } from '@angular/core';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableBodyRow } from '../../../declarations/classes/table-body-row.class';\nimport { TableScrollbarsService } from '../../../services/table-scrollbars.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableRowType } from '../../../declarations/enums/table-row-type.enum';\n\n@Component({\n  selector: 'pupa-table-body-row-container',\n  templateUrl: './table-body-row-container.component.html',\n  styleUrls: ['./table-body-row-container.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableBodyRowContainerComponent<T> {\n  @Input() public columns: TableColumn[];\n  @Input() public row: TableBodyRow<T>;\n\n  public readonly rowType: TableRowType = TableRowType.Body;\n\n  public readonly isPlaceholderVisible$: Observable<boolean> = this.tableScrollbarsService.isHorizontalVisible$.pipe(\n    map((isHorizontalVisible: boolean) => !isHorizontalVisible)\n  );\n\n  constructor(private readonly tableScrollbarsService: TableScrollbarsService) {}\n\n  public trackByFunction: TrackByFunction<TableColumn> = (index: number, _column: TableColumn) => index;\n}\n","<pupa-table-body-cell-container\n  *ngFor=\"let column of columns; trackBy: trackByFunction\"\n  class=\"body-cell\"\n  [class.row-hovered]=\"row.isHovered$ | async\"\n  [class.row-selected]=\"row.isSelected$ | async\"\n  [class.column-hovered]=\"column.isHovered$ | async\"\n  [row]=\"row\"\n  [column]=\"column\"\n  [style.width.px]=\"column.widthPx$ | async\"\n  [attr.data-index]=\"column.index\"\n  [attr.data-column-id]=\"column.definition.id\"\n  [attr.data-row-id]=\"row.id\"\n  [attr.data-row-type]=\"rowType\"\n>\n</pupa-table-body-cell-container>\n<div\n  *ngIf=\"isPlaceholderVisible$ | async\"\n  class=\"body-cell body-cell-placeholder\"\n  [class.row-hovered]=\"row.isHovered$ | async\"\n  [class.row-selected]=\"row.isSelected$ | async\"\n  [attr.data-column-id]=\"'placeholder'\"\n  [attr.data-row-id]=\"row.id\"\n  [attr.data-row-type]=\"rowType\"\n></div>\n","import { Directive, TemplateRef } from '@angular/core';\nimport { TableHeaderCellContext } from '../declarations/interfaces/table-header-cell-context.interface';\n\n@Directive({\n  selector: '[pupaTableHeaderCellTemplate]',\n})\nexport class TableHeaderCellTemplateDirective {\n  constructor(public readonly templateRef: TemplateRef<TableHeaderCellContext>) {}\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { TableBodyCellContext } from '../declarations/interfaces/table-body-cell-context.interface';\n\n@Directive({\n  selector: '[pupaTableBodyCellTemplate]',\n})\nexport class TableBodyCellTemplateDirective<T> {\n  @Input() public pupaTableBodyCellTemplateTypeFrom: T;\n\n  constructor(public readonly templateRef: TemplateRef<TableBodyCellContext<T>>) {}\n}\n","import {\n  Component,\n  ViewEncapsulation,\n  ChangeDetectionStrategy,\n  ContentChild,\n  AfterContentInit,\n  Input,\n} from '@angular/core';\nimport { TableHeaderCellTemplateDirective } from '../../../directives/table-header-cell-template.directive';\nimport { TableBodyCellTemplateDirective } from '../../../directives/table-cell-template.directive';\nimport { TableTemplatesService } from '../../../services/table-templates.service';\n\n@Component({\n  selector: 'pupa-table-column-template',\n  templateUrl: './table-column-template.component.html',\n  styleUrls: ['./table-column-template.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableColumnTemplateComponent<T> implements AfterContentInit {\n  @ContentChild(TableHeaderCellTemplateDirective) public tableHeaderCellTemplate: TableHeaderCellTemplateDirective;\n  @ContentChild(TableBodyCellTemplateDirective) public tableBodyCellTemplate: TableBodyCellTemplateDirective<T>;\n\n  @Input() public columnType: string;\n\n  constructor(private readonly tableTemplatesService: TableTemplatesService<T>) {}\n\n  public ngAfterContentInit(): void {\n    this.tableTemplatesService.registerTemplates(this.columnType, {\n      headerCell: this.tableHeaderCellTemplate?.templateRef,\n      bodyCell: this.tableBodyCellTemplate?.templateRef,\n    });\n  }\n}\n","<ng-content></ng-content>\n","import { TableCellHtmlElement } from '../interfaces/table-cell-html-element.interface';\n\nexport function isTableCellHtmlElement(value: unknown): value is TableCellHtmlElement {\n  if (!(value instanceof HTMLElement)) {\n    return false;\n  }\n\n  const element: TableCellHtmlElement = value as TableCellHtmlElement;\n  return (\n    element.dataset.columnId !== undefined &&\n    element.dataset.rowId !== undefined &&\n    element.dataset.rowType !== undefined\n  );\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { filterNotNil, isNil, Nullable, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { map, take, withLatestFrom } from 'rxjs/operators';\nimport { isTableCellHtmlElement } from '../declarations/type-guards/is-table-cell-html-element.type-guard';\n\n@Injectable()\nexport class TableColumnsIntersectionService implements OnDestroy {\n  private readonly subscription: Subscription = new Subscription();\n\n  private readonly columnIdToIntersectionEntryMap$: BehaviorSubject<Map<string, IntersectionObserverEntry>> =\n    new BehaviorSubject<Map<string, IntersectionObserverEntry>>(new Map<string, IntersectionObserverEntry>());\n\n  private readonly hiddenColumnsCount$: Observable<[string[], string[]]> = this.columnIdToIntersectionEntryMap$.pipe(\n    map((columnIdToIntersectionEntryMap: Map<string, IntersectionObserverEntry>) => {\n      const leftCountIds: string[] = [];\n      const rightCountIds: string[] = [];\n\n      for (const [columnId, entry] of columnIdToIntersectionEntryMap.entries()) {\n        if (isNil(entry)) {\n          continue;\n        }\n\n        if (entry.isIntersecting) {\n          continue;\n        }\n\n        if (isNil(entry.rootBounds) || isNil(entry.boundingClientRect.x)) {\n          continue;\n        }\n\n        if (entry.rootBounds.x > entry.boundingClientRect.x) {\n          leftCountIds.push(columnId);\n          continue;\n        }\n\n        if (entry.rootBounds.x < entry.boundingClientRect.x) {\n          rightCountIds.push(columnId);\n        }\n      }\n\n      return [leftCountIds, rightCountIds];\n    }),\n    shareReplayWithRefCount<[string[], string[]]>()\n  );\n\n  public readonly leftHiddenColumnIds$: Observable<string[]> = this.hiddenColumnsCount$.pipe(\n    map((data: [string[], string[]]) => data[0])\n  );\n  public readonly rightHiddenColumnIds$: Observable<string[]> = this.hiddenColumnsCount$.pipe(\n    map((data: [string[], string[]]) => data[1])\n  );\n\n  private readonly intersectionObserver$: BehaviorSubject<Nullable<IntersectionObserver>> = new BehaviorSubject<\n    Nullable<IntersectionObserver>\n  >(null);\n  public readonly entries$: Subject<IntersectionObserverEntry[]> = new Subject<IntersectionObserverEntry[]>();\n\n  constructor() {\n    this.subscription.add(this.processEntriesChanges());\n  }\n\n  public ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  public registerScrollArea(element: HTMLElement): void {\n    this.intersectionObserver$.pipe(take(1)).subscribe((intersectionObserver: Nullable<IntersectionObserver>) => {\n      if (!isNil(intersectionObserver)) {\n        intersectionObserver.disconnect();\n      }\n\n      const newIntersectionObserver: IntersectionObserver = new IntersectionObserver(\n        (entries: IntersectionObserverEntry[]) => {\n          this.entries$.next(entries);\n        },\n        {\n          root: element,\n          threshold: 0,\n        }\n      );\n\n      this.intersectionObserver$.next(newIntersectionObserver);\n    });\n  }\n\n  public observe(element: HTMLElement): void {\n    if (!isTableCellHtmlElement(element)) {\n      return;\n    }\n    this.intersectionObserver$.pipe(filterNotNil(), take(1)).subscribe((intersectionObserver: IntersectionObserver) => {\n      intersectionObserver.observe(element);\n    });\n  }\n\n  public unobserve(element: HTMLElement): void {\n    if (!isTableCellHtmlElement(element)) {\n      return;\n    }\n    this.intersectionObserver$\n      .pipe(filterNotNil(), take(1), withLatestFrom(this.columnIdToIntersectionEntryMap$))\n      .subscribe(\n        ([intersectionObserver, columnIdToIntersectionEntryMap]: [\n          IntersectionObserver,\n          Map<string, IntersectionObserverEntry>\n        ]) => {\n          const mapCopy: Map<string, IntersectionObserverEntry> = new Map<string, IntersectionObserverEntry>(\n            columnIdToIntersectionEntryMap\n          );\n          mapCopy.delete(element.dataset.columnId);\n          intersectionObserver.unobserve(element);\n          this.columnIdToIntersectionEntryMap$.next(mapCopy);\n        }\n      );\n  }\n\n  private processEntriesChanges(): Subscription {\n    return this.entries$\n      .pipe(withLatestFrom(this.columnIdToIntersectionEntryMap$))\n      .subscribe(\n        ([entries, columnIdToIntersectionEntryMap]: [\n          IntersectionObserverEntry[],\n          Map<string, IntersectionObserverEntry>\n        ]) => {\n          const mapCopy: Map<string, IntersectionObserverEntry> = new Map<string, IntersectionObserverEntry>(\n            columnIdToIntersectionEntryMap\n          );\n          for (const entry of entries) {\n            if (!(entry.target instanceof HTMLElement)) {\n              continue;\n            }\n            const columnId: string = entry.target.dataset.columnId;\n            mapCopy.set(columnId, entry);\n          }\n          this.columnIdToIntersectionEntryMap$.next(mapCopy);\n        }\n      );\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ComponentChange, ComponentChanges } from '@bimeister/pupakit.common';\nimport { isNil, Nullable } from '@bimeister/utilities';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableRow } from '../../../declarations/classes/table-row.class';\nimport { TableHeaderCellContext } from '../../../declarations/interfaces/table-header-cell-context.interface';\nimport { TableColumnsIntersectionService } from '../../../services/table-columns-intersection.service';\nimport { TableTemplatesService } from '../../../services/table-templates.service';\n\n@Component({\n  selector: 'pupa-table-header-cell-container',\n  templateUrl: './table-header-cell-container.component.html',\n  styleUrls: ['./table-header-cell-container.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeaderCellContainerComponent<T> implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() public column: TableColumn;\n  @Input() public row: TableRow;\n\n  public templateRef: TemplateRef<TableHeaderCellContext>;\n  public templateContext: TableHeaderCellContext = {\n    $implicit: null,\n    isDndClone: false,\n  };\n\n  constructor(\n    private readonly tableTemplatesService: TableTemplatesService<T>,\n    private readonly element: ElementRef<HTMLElement>,\n    private readonly tableColumnsIntersectionService: TableColumnsIntersectionService\n  ) {}\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.processColumnChanges(changes?.column);\n  }\n\n  public ngAfterViewInit(): void {\n    this.tableColumnsIntersectionService.observe(this.element.nativeElement);\n  }\n\n  public ngOnDestroy(): void {\n    this.tableColumnsIntersectionService.unobserve(this.element.nativeElement);\n  }\n\n  private processColumnChanges(change: Nullable<ComponentChange<this, TableColumn>>): void {\n    const value: Nullable<TableColumn> = change?.currentValue;\n    if (isNil(value)) {\n      return;\n    }\n\n    this.templateRef = this.tableTemplatesService.getHeaderCellTemplateByType(value.definition.type);\n    this.templateContext = {\n      $implicit: value,\n      isDndClone: false,\n    };\n  }\n}\n","<ng-container [ngTemplateOutlet]=\"templateRef\" [ngTemplateOutletContext]=\"templateContext\"></ng-container>\n<ng-content></ng-content>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableRow } from '../../../declarations/classes/table-row.class';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableScrollbarsService } from '../../../services/table-scrollbars.service';\nimport { TableRowType } from '../../../declarations/enums/table-row-type.enum';\n\n@Component({\n  selector: 'pupa-table-header-row-container',\n  templateUrl: './table-header-row-container.component.html',\n  styleUrls: ['./table-header-row-container.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeaderRowContainerComponent {\n  @Input() public columns: TableColumn[];\n  @Input() public row: TableRow;\n\n  public readonly rowType: TableRowType = TableRowType.Header;\n\n  public readonly isPlaceholderVisible$: Observable<boolean> = this.tableScrollbarsService.isHorizontalVisible$.pipe(\n    map((isHorizontalVisible: boolean) => !isHorizontalVisible)\n  );\n\n  constructor(private readonly tableScrollbarsService: TableScrollbarsService) {}\n}\n","<pupa-table-header-cell-container\n  *ngFor=\"let column of columns\"\n  class=\"header-cell\"\n  [class.row-hovered]=\"row.isHovered$ | async\"\n  [class.column-hovered]=\"column.isHovered$ | async\"\n  [class.column-dragged]=\"column.isDragged$ | async\"\n  [row]=\"row\"\n  [column]=\"column\"\n  [style.width.px]=\"column.widthPx$ | async\"\n  [attr.data-index]=\"column.index\"\n  [attr.data-column-id]=\"column.definition.id\"\n  [attr.data-row-id]=\"row.id\"\n  [attr.data-row-type]=\"rowType\"\n>\n  <div\n    *ngIf=\"column.definition.resizable\"\n    data-resizer\n    class=\"header-cell__resizer resizer\"\n    [class.resizer_visible]=\"column?.isCurrentResizable$ | async\"\n  >\n    <div class=\"resizer__stick\"></div>\n  </div>\n</pupa-table-header-cell-container>\n<div\n  *ngIf=\"isPlaceholderVisible$ | async\"\n  class=\"header-cell header-cell-placeholder\"\n  [class.row-hovered]=\"row.isHovered$ | async\"\n  [attr.data-column-id]=\"'placeholder'\"\n  [attr.data-row-id]=\"row.id\"\n  [attr.data-row-type]=\"rowType\"\n></div>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableRow } from '../../../declarations/classes/table-row.class';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableScrollbarsService } from '../../../services/table-scrollbars.service';\nimport { TableRowType } from '../../../declarations/enums/table-row-type.enum';\n\n@Component({\n  selector: 'pupa-table-placeholder-row-container',\n  templateUrl: './table-placeholder-row-container.component.html',\n  styleUrls: ['./table-placeholder-row-container.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TablePlaceholderRowContainerComponent {\n  @Input() public columns: TableColumn[];\n  @Input() public row: TableRow;\n  @Input() public isFullHeightCells: boolean = false;\n  public readonly rowType: TableRowType = TableRowType.Body;\n\n  public readonly isPlaceholderVisible$: Observable<boolean> = this.tableScrollbarsService.isHorizontalVisible$.pipe(\n    map((isHorizontalVisible: boolean) => !isHorizontalVisible)\n  );\n\n  constructor(private readonly tableScrollbarsService: TableScrollbarsService) {}\n}\n","<div\n  class=\"table-placeholder-cell\"\n  [class.table-placeholder-cell_full-height]=\"isFullHeightCells\"\n  *ngFor=\"let column of columns\"\n  [style.width.px]=\"column.widthPx$ | async\"\n  [attr.data-index]=\"column.index\"\n  [attr.data-column-id]=\"column.definition.id\"\n  [attr.data-row-id]=\"row.id\"\n  [attr.data-row-type]=\"rowType\"\n></div>\n<div\n  *ngIf=\"isPlaceholderVisible$ | async\"\n  class=\"table-placeholder-cell table-placeholder-cell-placeholder\"\n  [class.table-placeholder-cell_full-height]=\"isFullHeightCells\"\n  [attr.data-column-id]=\"'placeholder'\"\n  [attr.data-row-id]=\"row.id\"\n></div>\n","import { CollectionViewer, DataSource, ListRange } from '@angular/cdk/collections';\nimport { ReplaySubject, Observable, Subscription } from 'rxjs';\nimport { filterNotNil } from '@bimeister/utilities';\n\nexport class TableBodyRowsDataSource<T> extends DataSource<T> {\n  public readonly listRange$: ReplaySubject<ListRange> = new ReplaySubject<ListRange>(1);\n  private readonly subscription: Subscription = new Subscription();\n\n  constructor(private readonly data$: Observable<T[]>) {\n    super();\n  }\n\n  public connect(collectionViewer: CollectionViewer): Observable<T[]> {\n    const subscription: Subscription = collectionViewer.viewChange.subscribe((listRange: ListRange) => {\n      this.listRange$.next(listRange);\n    });\n    this.subscription.add(subscription);\n    return this.data$.pipe(filterNotNil());\n  }\n\n  public disconnect(_collectionViewer: CollectionViewer): void {\n    this.subscription.unsubscribe();\n  }\n\n  public setInitialListRange(listRange: ListRange): void {\n    this.listRange$.next(listRange);\n  }\n}\n","import { ListRange } from '@angular/cdk/collections';\nimport { BusEventBase } from '@bimeister/pupakit.common';\nimport { getUuid, Nullable } from '@bimeister/utilities';\nimport { TableColumnDefinition } from '../interfaces/table-column-definition.interface';\nimport { TableEventTargetCellData } from '../interfaces/table-event-target-cell-data.interface';\n\nexport namespace TableEvents {\n  export class TableEventBase<T = unknown> extends BusEventBase<T> {\n    public readonly scope: Nullable<string> = null;\n    public readonly id: string = getUuid();\n    public readonly type: Nullable<string> = null;\n    public readonly payload: T = null;\n\n    constructor(public readonly fromId: Nullable<string> = null) {\n      super();\n    }\n  }\n\n  export class ColumnHover extends TableEventBase {\n    constructor(public readonly columnId: string) {\n      super();\n    }\n  }\n  export class RowHover extends TableEventBase {\n    constructor(public readonly rowId: string) {\n      super();\n    }\n  }\n  export class CellClick extends TableEventBase {\n    constructor(public readonly targetCell: Nullable<TableEventTargetCellData>) {\n      super();\n    }\n  }\n\n  export class MouseOver extends TableEventBase {\n    constructor(public readonly targetCell: Nullable<TableEventTargetCellData>) {\n      super();\n    }\n  }\n\n  export class PanStart extends TableEventBase {\n    constructor(\n      public readonly targetCell: Nullable<TableEventTargetCellData>,\n      public readonly triggeredByResizer: boolean,\n      public readonly pointerType: string\n    ) {\n      super();\n    }\n  }\n  export class Pan extends TableEventBase {\n    constructor(\n      public readonly targetCell: Nullable<TableEventTargetCellData>,\n      public readonly panDelta: [number, number],\n      public readonly globalPosition: [number, number]\n    ) {\n      super();\n    }\n  }\n  export class PanEnd extends TableEventBase {\n    constructor(public readonly targetCell: Nullable<TableEventTargetCellData>) {\n      super();\n    }\n  }\n\n  export class ColumnDragStart extends TableEventBase {\n    constructor(public readonly columnId: string) {\n      super();\n    }\n  }\n  export class ColumnDragIndicatorPositionChange extends TableEventBase {\n    constructor(public readonly offsetLeft: Nullable<number>) {\n      super();\n    }\n  }\n  export class ColumnDragEnd extends TableEventBase {\n    constructor(public readonly columnId: string, public readonly newIndex: number, public readonly oldIndex: number) {\n      super();\n    }\n  }\n  export class ColumnWidthChanged extends TableEventBase {\n    constructor(public readonly widthPx: number, public readonly columnId: string) {\n      super();\n    }\n  }\n  export class ListRangeChanged extends TableEventBase {\n    constructor(public readonly listRange: ListRange) {\n      super();\n    }\n  }\n  export class HiddenColumnIdsChanged extends TableEventBase {\n    constructor(public readonly leftColumnIds: string[], public readonly rightColumnIds: string[]) {\n      super();\n    }\n  }\n  export class HorizontalScrollBarVisibilityChanged extends TableEventBase {\n    constructor(public readonly isVisible: boolean) {\n      super();\n    }\n  }\n  export class VerticalScrollBarVisibilityChanged extends TableEventBase {\n    constructor(public readonly isVisible: boolean) {\n      super();\n    }\n  }\n\n  export class SetData<T> extends TableEventBase {\n    constructor(public readonly data: T[]) {\n      super();\n    }\n  }\n  export class SetSelected extends TableEventBase {\n    constructor(public readonly selectedRowTrackByIds: string[]) {\n      super();\n    }\n  }\n  export class SetColumnDefinitions extends TableEventBase {\n    constructor(public readonly definitions: TableColumnDefinition[]) {\n      super();\n    }\n  }\n  export class FitColumns extends TableEventBase {}\n  export class StartFitColumnsOnResize extends TableEventBase {}\n  export class StopFitColumnsOnResize extends TableEventBase {}\n  export class UpdateColumnWidthByDelta extends TableEventBase {\n    constructor(public columnId: string, public readonly deltaPx: number) {\n      super();\n    }\n  }\n  export class SetColumnWidth extends TableEventBase {\n    constructor(public columnId: string, public readonly widthPx: number) {\n      super();\n    }\n  }\n  export class ScrollByIndex extends TableEventBase {\n    constructor(public readonly index: number) {\n      super();\n    }\n  }\n  export class RefreshDataSlice extends TableEventBase {}\n}\n","import { TableColumnSorting } from '../enums/table-column-sorting.enum';\nimport { TableEvents } from './table.events';\n\nexport namespace TableFeatureEvents {\n  export class TableFeatureEventBase extends TableEvents.TableEventBase {}\n\n  export class ColumnSortingChanged extends TableFeatureEventBase {\n    constructor(public readonly sorting: TableColumnSorting, public readonly columnId: string) {\n      super();\n    }\n  }\n\n  export class ToggleColumnSorting extends TableFeatureEventBase {\n    constructor(public columnId: string) {\n      super();\n    }\n  }\n\n  export class SetColumnSorting extends TableFeatureEventBase {\n    constructor(public columnId: string, public readonly sorting: TableColumnSorting) {\n      super();\n    }\n  }\n}\n","import { ListRange } from '@angular/cdk/collections';\nimport { TrackByFunction } from '@angular/core';\nimport { isNil, Nullable, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { BehaviorSubject, combineLatest, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { TableColumnPin } from '../enums/table-column-pin.enum';\nimport { TableColumnDefinition } from '../interfaces/table-column-definition.interface';\nimport { TableDataDisplayCollectionRef } from '../interfaces/table-data-display-collection-ref.interface';\nimport { TableBodyRow } from './table-body-row.class';\nimport { TableBodyRowsDataSource } from './table-body-rows-data-source.class';\nimport { TableColumn } from './table-column.class';\nimport { TableRow } from './table-row.class';\n\ninterface DistributedColumns {\n  leftPinnedColumns: TableColumn[];\n  scrollableColumns: TableColumn[];\n  rightPinnedColumns: TableColumn[];\n}\n\nconst DEFAULT_ROW_HEIGHT_PX: number = 50;\nconst DEFAULT_MIN_BUFFER_PX: number = 100;\n\nexport class TableDataDisplayCollection<T> implements TableDataDisplayCollectionRef<T> {\n  public readonly data$: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\n  public readonly selectedIdsList$: BehaviorSubject<string[]> = new BehaviorSubject([]);\n\n  public readonly trackBy$: Subject<TrackByFunction<T>> = new BehaviorSubject<TrackByFunction<T>>(\n    TableDataDisplayCollection.trackBy\n  );\n  public readonly scrollBehavior$: BehaviorSubject<ScrollBehavior> = new BehaviorSubject('smooth');\n\n  private readonly columnDefinitions$: BehaviorSubject<TableColumnDefinition[]> = new BehaviorSubject<\n    TableColumnDefinition[]\n  >([]);\n\n  public readonly headerRowHeightPx$: BehaviorSubject<number> = new BehaviorSubject<number>(DEFAULT_ROW_HEIGHT_PX);\n  public readonly bodyRowHeightPx$: BehaviorSubject<number> = new BehaviorSubject<number>(DEFAULT_ROW_HEIGHT_PX);\n\n  public readonly minBufferPx$: BehaviorSubject<number> = new BehaviorSubject<number>(DEFAULT_MIN_BUFFER_PX);\n  public readonly countOfVisibleRows$: ReplaySubject<number> = new ReplaySubject<number>(1);\n\n  public readonly virtualScrollDataSource: TableBodyRowsDataSource<T> = new TableBodyRowsDataSource<T>(this.data$);\n\n  private columnIdToColumnMap: Map<string, TableColumn> = new Map<string, TableColumn>();\n  public readonly columnIdToColumnMap$: Observable<Map<string, TableColumn>> = this.columnDefinitions$.pipe(\n    map((definitions: TableColumnDefinition[]) => {\n      const newColumnIdToColumnMap: Map<string, TableColumn> = new Map<string, TableColumn>();\n\n      definitions.forEach((definition: TableColumnDefinition, index: number) => {\n        const existingColumn: Nullable<TableColumn> = this.columnIdToColumnMap.get(definition.id);\n        const column: TableColumn = isNil(existingColumn) ? new TableColumn() : existingColumn;\n\n        column.index = index;\n        column.definition = definition;\n\n        newColumnIdToColumnMap.set(definition.id, column);\n      });\n\n      this.columnIdToColumnMap = newColumnIdToColumnMap;\n      return this.columnIdToColumnMap;\n    }),\n    shareReplayWithRefCount()\n  );\n\n  private readonly distributedColumns$: Observable<DistributedColumns> = this.columnIdToColumnMap$.pipe(\n    map((columnIdToColumnMap: Map<string, TableColumn>) => Array.from(columnIdToColumnMap.values())),\n    map((columns: TableColumn[]) => {\n      const leftPinnedColumns: TableColumn[] = [];\n      const scrollableColumns: TableColumn[] = [];\n      const rightPinnedColumns: TableColumn[] = [];\n\n      for (const column of columns) {\n        const columnPin: TableColumnPin = column.definition.pin;\n        switch (columnPin) {\n          case TableColumnPin.Left:\n            leftPinnedColumns.push(column);\n            continue;\n          case TableColumnPin.Right:\n            rightPinnedColumns.push(column);\n            continue;\n          default:\n            scrollableColumns.push(column);\n        }\n      }\n      return { leftPinnedColumns, scrollableColumns, rightPinnedColumns };\n    }),\n    shareReplayWithRefCount()\n  );\n\n  public readonly pinnedLeftColumns$: Observable<TableColumn[]> = this.distributedColumns$.pipe(\n    map(({ leftPinnedColumns }: DistributedColumns) => leftPinnedColumns)\n  );\n  public readonly scrollableColumns$: Observable<TableColumn[]> = this.distributedColumns$.pipe(\n    map(({ scrollableColumns }: DistributedColumns) => scrollableColumns)\n  );\n  public readonly pinnedRightColumns$: Observable<TableColumn[]> = this.distributedColumns$.pipe(\n    map(({ rightPinnedColumns }: DistributedColumns) => rightPinnedColumns)\n  );\n\n  public readonly headerRow: TableRow = new TableRow();\n  public readonly placeholderRow: TableRow = new TableRow();\n\n  private readonly selectedIdsSet$: Observable<Set<string>> = this.selectedIdsList$.pipe(\n    map((selectedIdsList: string[]) => new Set<string>(selectedIdsList)),\n    shareReplayWithRefCount()\n  );\n  public readonly bodyRowIdToBodyRowMap$: Observable<Map<string, TableBodyRow<T>>> = combineLatest([\n    this.data$,\n    this.virtualScrollDataSource.listRange$,\n    this.trackBy$,\n  ]).pipe(\n    map(([data, listRange, trackBy]: [T[], ListRange, TrackByFunction<T>]) => {\n      const newColumnIdToColumnMap: Map<string, TableBodyRow<T>> = new Map<string, TableBodyRow<T>>();\n\n      const dataSlice: T[] = data.slice(listRange.start, listRange.end);\n      dataSlice.forEach((dataItem: T, index: number) => {\n        const id: string = trackBy(index, dataItem);\n        const row: TableBodyRow<T> = new TableBodyRow<T>(id, dataItem, this.selectedIdsSet$);\n        newColumnIdToColumnMap.set(id, row);\n      });\n\n      return newColumnIdToColumnMap;\n    }),\n    shareReplayWithRefCount()\n  );\n\n  public readonly tableWidthPx$: BehaviorSubject<Nullable<number>> = new BehaviorSubject<Nullable<number>>(null);\n  public readonly tableHeightPx$: BehaviorSubject<Nullable<number>> = new BehaviorSubject<Nullable<number>>(null);\n\n  public readonly tableViewportSizePx$: ReplaySubject<number> = new ReplaySubject<number>(1);\n\n  public setData(data: T[]): Observable<T[]> {\n    this.data$.next(data);\n    return this.data$.pipe(take(1));\n  }\n\n  public setSelectedIdsList(value: string[]): void {\n    this.selectedIdsList$.next(value);\n  }\n\n  public setColumnDefinitions(definitions: TableColumnDefinition[]): void {\n    this.columnDefinitions$.next(definitions);\n  }\n\n  public setTableWidthPx(value: number): void {\n    this.tableWidthPx$.next(value);\n  }\n\n  public setTableHeightPx(value: number): void {\n    this.tableHeightPx$.next(value);\n  }\n\n  public setTableViewportSizePx(value: number): void {\n    this.tableViewportSizePx$.next(value);\n  }\n\n  public measureFirstVisibleListRange(): void {\n    combineLatest([this.bodyRowHeightPx$, this.tableViewportSizePx$, this.minBufferPx$])\n      .pipe(take(1))\n      .subscribe(([bodyRowHeightPx, tableViewportSizePx, minBufferPx]: [number, number, number]) => {\n        const countOfVisibleRows: number = Math.ceil((tableViewportSizePx + minBufferPx * 2) / bodyRowHeightPx);\n        this.countOfVisibleRows$.next(countOfVisibleRows);\n\n        this.virtualScrollDataSource.setInitialListRange({ start: 0, end: countOfVisibleRows });\n      });\n  }\n\n  public setHeaderRowHeightPx(value?: number): void {\n    if (isNil(value)) {\n      return;\n    }\n    this.headerRowHeightPx$.next(value);\n  }\n\n  public setBodyRowHeightPx(value?: number): void {\n    if (isNil(value)) {\n      return;\n    }\n    this.bodyRowHeightPx$.next(value);\n  }\n\n  public static readonly trackBy: TrackByFunction<any> = <U>(index: number, dataItem: U): string => {\n    if (isNil(dataItem)) {\n      return `${index}__null`;\n    }\n    return `${index}__${JSON.stringify(dataItem)}`;\n  };\n}\n","import { TrackByFunction, Type } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { Nullable } from '@bimeister/utilities';\nimport { Observable } from 'rxjs';\nimport { TableFeatureEvents } from '../events/table-feature.events';\nimport { TableEvents } from '../events/table.events';\nimport { TableColumnDefinition } from '../interfaces/table-column-definition.interface';\nimport { TableControllerOptions } from '../interfaces/table-controller-options.interface';\nimport { TableDataDisplayCollectionRef } from '../interfaces/table-data-display-collection-ref.interface';\nimport { TableFeatureConstructor } from '../types/table-feature-constructor.type';\nimport { TableDataDisplayCollection } from './table-data-display-collection.class';\nimport { EventsQueue, QueueEvents } from '@bimeister/pupakit.common';\n\nimport TableEventBase = TableEvents.TableEventBase;\nimport TableFeatureEventBase = TableFeatureEvents.TableFeatureEventBase;\n\nconst DEFAULT_SKELETON_ROWS_COUNT: number = 100;\n\nexport class TableController<T> {\n  public readonly eventBus: EventBus = new EventBus();\n\n  protected readonly queue: EventsQueue = new EventsQueue(this.eventBus);\n\n  protected readonly dataDisplayCollection: TableDataDisplayCollection<T> = new TableDataDisplayCollection<T>();\n\n  public readonly features: TableFeatureConstructor<T>[] = this.options?.features ?? [];\n\n  constructor(private readonly options?: TableControllerOptions<T>) {\n    this.setHeaderRowHeightPx(options?.headerRowHeightPx);\n    this.setBodyRowHeightPx(options?.bodyRowHeightPx);\n    this.setScrollBehavior(options?.scrollBehavior);\n    this.setTrackBy(options?.trackBy);\n  }\n\n  protected dispatchInQueue(event: TableEventBase): void {\n    const queueEvent: QueueEvents.AddToQueue = new QueueEvents.AddToQueue(event);\n    this.eventBus.dispatch(queueEvent);\n  }\n\n  public dispatchFeatureEvent(event: TableFeatureEventBase): void {\n    this.dispatchInQueue(event);\n  }\n\n  public getEvents<E extends TableEventBase>(eventType: Type<E>): Observable<E> {\n    return this.queue.getEvents(eventType);\n  }\n\n  public getDataDisplayCollectionRef(): TableDataDisplayCollectionRef<T> {\n    return this.dataDisplayCollection;\n  }\n\n  public setData(data: T[]): void {\n    this.dispatchInQueue(new TableEvents.SetData(data));\n  }\n\n  public setColumnDefinitions(columnDefinitions: TableColumnDefinition[]): void {\n    this.dispatchInQueue(new TableEvents.SetColumnDefinitions(columnDefinitions));\n  }\n\n  public fitColumns(): void {\n    this.dispatchInQueue(new TableEvents.FitColumns());\n  }\n\n  public startFitColumnsOnResize(): void {\n    this.dispatchInQueue(new TableEvents.StartFitColumnsOnResize());\n  }\n\n  public stopFitColumnsOnResize(): void {\n    this.dispatchInQueue(new TableEvents.StopFitColumnsOnResize());\n  }\n\n  public updateColumnWidthByDelta(columnId: string, deltaPx: number): void {\n    this.dispatchInQueue(new TableEvents.UpdateColumnWidthByDelta(columnId, deltaPx));\n  }\n\n  public setColumnWidth(columnId: string, widthPx: number): void {\n    this.dispatchInQueue(new TableEvents.SetColumnWidth(columnId, widthPx));\n  }\n\n  public refreshDataSlice(): void {\n    this.dispatchInQueue(new TableEvents.RefreshDataSlice());\n  }\n\n  public setSelected(...selectedIdsFromTrackBy: string[]): void {\n    this.dispatchInQueue(new TableEvents.SetSelected(selectedIdsFromTrackBy));\n  }\n\n  public scrollByIndex(index: number): void {\n    this.dispatchInQueue(new TableEvents.ScrollByIndex(index));\n  }\n\n  public setHeaderRowHeightPx(headerRowHeightPx?: number): void {\n    this.dataDisplayCollection.setHeaderRowHeightPx(headerRowHeightPx);\n  }\n\n  public setBodyRowHeightPx(bodyRowHeightPx?: number): void {\n    this.dataDisplayCollection.setBodyRowHeightPx(bodyRowHeightPx);\n  }\n\n  public setBodyInitialCountOfSkeletonRows(countOfRows: Nullable<number> = DEFAULT_SKELETON_ROWS_COUNT): void {\n    const skeletonRows: T[] = new Array(countOfRows ?? DEFAULT_SKELETON_ROWS_COUNT).fill(null);\n    this.setData(skeletonRows);\n  }\n\n  private setScrollBehavior(scrollBehavior: ScrollBehavior = 'smooth'): void {\n    this.dataDisplayCollection.scrollBehavior$.next(scrollBehavior);\n  }\n\n  private setTrackBy(trackBy: TrackByFunction<T> = TableDataDisplayCollection.trackBy): void {\n    this.dataDisplayCollection.trackBy$.next(trackBy);\n  }\n}\n","import { ListRange } from '@angular/cdk/collections';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { QueueEvents } from '@bimeister/pupakit.common';\nimport { filterByInstanceOf } from '@bimeister/utilities';\nimport { Subscription } from 'rxjs';\nimport { map, mapTo, switchMap, tap, withLatestFrom } from 'rxjs/operators';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableDataDisplayCollectionRef } from '../../interfaces/table-data-display-collection-ref.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\n\nexport class TableCommonFeature<T> implements TableFeature {\n  private readonly subscription: Subscription = new Subscription();\n\n  private readonly eventBus: EventBus = this.api.eventBus;\n  private readonly displayData: TableDataDisplayCollectionRef<T> = this.api.displayData;\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processOuterSetSetDataEvent());\n    this.subscription.add(this.processOuterSetColumnDefinitionsEvent());\n    this.subscription.add(this.processOuterRefreshDataSliceEvent());\n    this.subscription.add(this.processOuterSetSelectedEvent());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private processOuterSetSetDataEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.SetData),\n        switchMap((event: TableEvents.SetData<T>) => this.displayData.setData(event.data).pipe(mapTo(event)))\n      )\n      .subscribe((event: TableEvents.SetData<T>) => this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id)));\n  }\n\n  private processOuterSetColumnDefinitionsEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.SetColumnDefinitions),\n        tap((event: TableEvents.SetColumnDefinitions) => {\n          this.displayData.setColumnDefinitions(event.definitions);\n        })\n      )\n      .subscribe((event: TableEvents.SetColumnDefinitions) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterRefreshDataSliceEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.RefreshDataSlice),\n        withLatestFrom(this.displayData.virtualScrollDataSource.listRange$, this.displayData.countOfVisibleRows$),\n        map(([event, listRange, countOfVisibleRows]: [TableEvents.RefreshDataSlice, ListRange, number]) => {\n          const targetListRange: ListRange = { ...listRange };\n          if (listRange.end < countOfVisibleRows) {\n            targetListRange.end = listRange.start + countOfVisibleRows;\n          }\n          this.eventBus.dispatch(new TableEvents.ListRangeChanged(targetListRange));\n          return event;\n        })\n      )\n      .subscribe((event: TableEvents.RefreshDataSlice) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterSetSelectedEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.SetSelected),\n        map((event: TableEvents.SetSelected) => {\n          this.displayData.setSelectedIdsList(event.selectedRowTrackByIds);\n          return event;\n        })\n      )\n      .subscribe((event: TableEvents.SetSelected) => this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id)));\n  }\n}\n","import { TemplateRef } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterByInstanceOf, filterNotNil, isNil, Nullable } from '@bimeister/utilities';\nimport { Observable, Subscription } from 'rxjs';\nimport { filter, map, take, withLatestFrom } from 'rxjs/operators';\nimport { TableColumnPin } from '../../enums/table-column-pin.enum';\nimport { TableRowType } from '../../enums/table-row-type.enum';\nimport { TableColumnEvents } from '../../events/table-column.events';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableDataDisplayCollectionRef } from '../../interfaces/table-data-display-collection-ref.interface';\nimport { TableEventTargetCellData } from '../../interfaces/table-event-target-cell-data.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\nimport { TableHeaderCellContext } from '../../interfaces/table-header-cell-context.interface';\nimport { TableTemplatesRegistry } from '../../interfaces/tables-templates-registry.interface';\nimport { TableColumn } from '../table-column.class';\nimport { ScrollableComponent } from '@bimeister/pupakit.kit';\nimport { DndCloneService } from '@bimeister/pupakit.overlays';\n\nconst SCROLL_SPEED_PX: number = 5;\n\nexport class TableDndFeature<T> implements TableFeature {\n  private readonly eventBus: EventBus = this.api.eventBus;\n  private readonly dndCloneService: DndCloneService = this.api.tableInjector.get(DndCloneService);\n  private readonly tableElement: HTMLElement = this.api.tableElement;\n  private readonly displayData: TableDataDisplayCollectionRef<T> = this.api.displayData;\n  private readonly bodyScrollableContainerRef: ScrollableComponent = this.api.bodyScrollableContainerRef;\n  private readonly templateRegistry: TableTemplatesRegistry<T> = this.api.templatesRegistry;\n\n  private readonly subscription: Subscription = new Subscription();\n\n  private readonly columnIdToColumnMap$: Observable<Map<string, TableColumn>> = this.displayData.columnIdToColumnMap$;\n\n  private currentDraggableColumn: TableColumn | null = null;\n  private currentDraggableNewIndex: number | null = null;\n  private currentTargetColumn: TableColumn | null = null;\n  private isScrollLoopActive: boolean = false;\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processPanStart());\n    this.subscription.add(this.processPan());\n    this.subscription.add(this.processPanEnd());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private processPanStart(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.PanStart),\n        filter((event: TableEvents.PanStart) => event.pointerType === 'mouse' && !event.triggeredByResizer),\n        map((event: TableEvents.PanStart) => event.targetCell),\n        filterNotNil(),\n        filter((targetCell: TableEventTargetCellData) => targetCell.rowType === TableRowType.Header),\n        withLatestFrom(this.columnIdToColumnMap$),\n        map(([targetCell, columnIdToColumnMap]: [TableEventTargetCellData, Map<string, TableColumn>]) => [\n          targetCell,\n          columnIdToColumnMap.get(targetCell.columnId),\n        ]),\n        filter(([_, tableColumn]: [TableEventTargetCellData, Nullable<TableColumn>]) => !isNil(tableColumn)),\n        filter(\n          ([_, tableColumn]: [TableEventTargetCellData, TableColumn]) =>\n            !isNil(tableColumn.definition.draggable) && tableColumn.definition.draggable\n        ),\n        filter(([_, tableColumn]: [TableEventTargetCellData, TableColumn]) => {\n          const columnPin: TableColumnPin = tableColumn.definition.pin ?? TableColumnPin.None;\n          return columnPin === TableColumnPin.None;\n        })\n      )\n      .pipe(\n        map(([targetCell, tableColumn, _]: [TableEventTargetCellData, TableColumn, boolean]) => [\n          targetCell,\n          tableColumn,\n        ])\n      )\n      .subscribe(([targetCell, tableColumn]: [TableEventTargetCellData, TableColumn]) => {\n        this.startColumnDragging(targetCell, tableColumn);\n      });\n  }\n\n  private processPan(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filter(() => !isNil(this.currentDraggableColumn)),\n        filterByInstanceOf(TableEvents.Pan)\n      )\n      .subscribe((event: TableEvents.Pan) => {\n        this.stopScrollLoop();\n        this.updateCurrentTargetCell(event);\n        this.checkAndStartScrollLoop(event);\n        this.calculateNewIndexAndUpdateDndIndicatorPosition(event);\n        this.moveCurrentDraggableColumnClone([event.globalPosition[0], event.globalPosition[1]]);\n      });\n  }\n\n  private processPanEnd(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(filterByInstanceOf(TableEvents.PanEnd))\n      .subscribe(() => {\n        this.stopColumnDragging();\n        this.hideDndIndicator();\n        this.stopScrollLoop();\n\n        if (isNil(this.currentDraggableColumn) || isNil(this.currentDraggableNewIndex)) {\n          return;\n        }\n\n        this.eventBus.dispatch(\n          new TableEvents.ColumnDragEnd(\n            this.currentDraggableColumn.definition.id,\n            this.currentDraggableNewIndex,\n            this.currentDraggableColumn.index\n          )\n        );\n\n        this.clearTargetColumnData();\n        this.currentDraggableColumn = null;\n      });\n  }\n\n  private startColumnDragging(targetCell: TableEventTargetCellData, tableColumn: TableColumn): void {\n    this.currentDraggableColumn = tableColumn;\n    const columnId: string = this.currentDraggableColumn.definition.id;\n    const columnType: string = this.currentDraggableColumn.definition.type;\n\n    this.eventBus.dispatch(new TableEvents.ColumnDragStart(columnId));\n\n    this.currentDraggableColumn.dispatchEvent(new TableColumnEvents.CurrentDraggableChanged(true));\n\n    const headerCellTemplateRef: TemplateRef<TableHeaderCellContext> =\n      this.templateRegistry.getHeaderCellTemplateByType(columnType);\n\n    const templateContext: TableHeaderCellContext = {\n      $implicit: this.currentDraggableColumn,\n      isDndClone: true,\n    };\n\n    const dndCloneWidthPx: number = targetCell.element.clientWidth;\n    const dndCloneHeightPx: number = targetCell.element.clientHeight;\n\n    this.dndCloneService.create(\n      headerCellTemplateRef,\n      templateContext,\n      dndCloneWidthPx,\n      dndCloneHeightPx,\n      this.api.tableInjector\n    );\n  }\n\n  private updateCurrentTargetCell(event: TableEvents.Pan): void {\n    const targetCell: Nullable<TableEventTargetCellData> = event.targetCell;\n    const currentTargetColumnId: Nullable<string> = this.currentTargetColumn?.definition.id;\n\n    if (currentTargetColumnId === targetCell?.columnId) {\n      return;\n    }\n\n    this.columnIdToColumnMap$.pipe(take(1)).subscribe((columnIdToColumnMap: Map<string, TableColumn>) => {\n      this.hideDndIndicator();\n\n      this.currentTargetColumn?.dispatchEvent(new TableColumnEvents.CurrentDragTargetChanged(false));\n      const newTargetColumn: Nullable<TableColumn> = columnIdToColumnMap.get(targetCell?.columnId);\n\n      if (isNil(newTargetColumn)) {\n        this.clearTargetColumnData();\n        return;\n      }\n\n      const newTargetColumnPin: TableColumnPin = newTargetColumn.definition.pin ?? TableColumnPin.None;\n\n      if (newTargetColumnPin !== TableColumnPin.None) {\n        this.clearTargetColumnData();\n        return;\n      }\n\n      this.currentTargetColumn = newTargetColumn;\n      this.currentTargetColumn.dispatchEvent(new TableColumnEvents.CurrentDragTargetChanged(true));\n    });\n  }\n\n  private checkAndStartScrollLoop(event: TableEvents.Pan): void {\n    if (this.bodyScrollableContainerRef.isIntersectsLeftScrollTriggerZone(event.globalPosition[0])) {\n      this.startScrollLoop(-SCROLL_SPEED_PX);\n    }\n\n    if (this.bodyScrollableContainerRef.isIntersectsRightScrollTriggerZone(event.globalPosition[0])) {\n      this.startScrollLoop(SCROLL_SPEED_PX);\n    }\n  }\n\n  private calculateNewIndexAndUpdateDndIndicatorPosition(event: TableEvents.Pan): void {\n    const targetCell: Nullable<TableEventTargetCellData> = event.targetCell;\n    const currentDraggableColumnId: Nullable<string> = this.currentDraggableColumn?.definition.id;\n    const currentTargetColumnId: Nullable<string> = this.currentTargetColumn?.definition.id;\n\n    if (\n      isNil(targetCell) ||\n      isNil(this.currentTargetColumn) ||\n      isNil(this.currentDraggableColumn) ||\n      currentDraggableColumnId === currentTargetColumnId\n    ) {\n      return;\n    }\n    const draggableIndex: number = this.currentDraggableColumn.index;\n    const targetIndex: number = this.currentTargetColumn.index;\n\n    const targetClientRect: DOMRect = targetCell.element.getBoundingClientRect();\n    const tableClientRect: DOMRect = this.tableElement.getBoundingClientRect();\n    const scrollableBodyRect: DOMRect = this.bodyScrollableContainerRef.element.getBoundingClientRect();\n\n    const targetWidthPx: number = targetClientRect.width;\n    const targetXMousePosition: number = event.globalPosition[0] - targetClientRect.left;\n    const positionCoefficient: number = Math.round(\n      (targetWidthPx - (targetWidthPx - targetXMousePosition)) / targetWidthPx\n    );\n    const indexCorrectionCoefficient: number =\n      draggableIndex - targetIndex > 0 ? positionCoefficient : positionCoefficient - 1;\n    const draggableNewIndex: number = targetIndex + indexCorrectionCoefficient;\n\n    const indicatorPosition: number = positionCoefficient < 0.5 ? targetClientRect.left - 1 : targetClientRect.right;\n\n    const isIndicatorVisible: boolean =\n      !this.isScrollLoopActive &&\n      indicatorPosition >= scrollableBodyRect.left - 1 &&\n      indicatorPosition <= scrollableBodyRect.right + 1;\n\n    const indicatorOffsetLeft: number = indicatorPosition - tableClientRect.left;\n\n    if (!isIndicatorVisible || draggableNewIndex === draggableIndex) {\n      this.hideDndIndicator();\n    } else {\n      this.setDndIndicatorOffsetLeft(indicatorOffsetLeft);\n    }\n\n    this.currentDraggableNewIndex = draggableNewIndex;\n  }\n\n  private setDndIndicatorOffsetLeft(offsetLeftPx: number): void {\n    this.eventBus.dispatch(new TableEvents.ColumnDragIndicatorPositionChange(offsetLeftPx));\n  }\n\n  private hideDndIndicator(): void {\n    this.eventBus.dispatch(new TableEvents.ColumnDragIndicatorPositionChange(null));\n  }\n\n  private moveCurrentDraggableColumnClone(position: [number, number]): void {\n    this.dndCloneService.updatePosition(position);\n  }\n\n  private stopColumnDragging(): void {\n    this.currentDraggableColumn?.dispatchEvent(new TableColumnEvents.CurrentDraggableChanged(false));\n    this.dndCloneService.destroy();\n  }\n\n  private startScrollLoop(speedPx: number): void {\n    this.hideDndIndicator();\n    this.bodyScrollableContainerRef.startScrollLeftByDeltaLoop(speedPx);\n    this.isScrollLoopActive = true;\n  }\n\n  private stopScrollLoop(): void {\n    this.bodyScrollableContainerRef.stopScrollLeftByDeltaLoop();\n    this.isScrollLoopActive = false;\n  }\n\n  private clearTargetColumnData(): void {\n    this.currentTargetColumn = null;\n    this.currentDraggableNewIndex = null;\n  }\n}\n","import { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterByInstanceOf, isNil } from '@bimeister/utilities';\nimport { Observable, Subscription } from 'rxjs';\nimport { withLatestFrom } from 'rxjs/operators';\nimport { TableColumnEvents } from '../../events/table-column.events';\nimport { TableRowEvents } from '../../events/table-row.events';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\nimport { TableBodyRow } from '../table-body-row.class';\nimport { TableColumn } from '../table-column.class';\n\nexport class TableHoverFeature<T> implements TableFeature {\n  private readonly eventBus: EventBus = this.api.eventBus;\n  private readonly columnIdToColumnMap$: Observable<Map<string, TableColumn>> =\n    this.api.displayData.columnIdToColumnMap$;\n  private readonly bodyRowIdToBodyRowMap$: Observable<Map<string, TableBodyRow<T>>> =\n    this.api.displayData.bodyRowIdToBodyRowMap$;\n\n  private readonly subscription: Subscription = new Subscription();\n\n  private currentHoveredColumn: TableColumn | null = null;\n  private currentHoveredBodyRow: TableBodyRow<T> | null = null;\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processMouseOver());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private processMouseOver(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.MouseOver),\n        withLatestFrom(this.columnIdToColumnMap$, this.bodyRowIdToBodyRowMap$)\n      )\n      .subscribe(\n        ([event, columnIdToColumnMap, bodyRowIdToBodyRowMap]: [\n          TableEvents.MouseOver,\n          Map<string, TableColumn>,\n          Map<string, TableBodyRow<T>>\n        ]) => {\n          this.currentHoveredBodyRow?.dispatch(new TableRowEvents.HoverChanged(false));\n          this.currentHoveredColumn?.dispatchEvent(new TableColumnEvents.HoverChanged(false));\n\n          if (isNil(event.targetCell)) {\n            this.currentHoveredBodyRow = null;\n            this.currentHoveredColumn = null;\n\n            this.eventBus.dispatch(new TableEvents.RowHover(null));\n            this.eventBus.dispatch(new TableEvents.ColumnHover(null));\n            return;\n          }\n\n          this.currentHoveredBodyRow = bodyRowIdToBodyRowMap.get(event.targetCell.rowId);\n          this.currentHoveredColumn = columnIdToColumnMap.get(event.targetCell.columnId);\n\n          this.currentHoveredBodyRow?.dispatch(new TableRowEvents.HoverChanged(true));\n          this.currentHoveredColumn?.dispatchEvent(new TableColumnEvents.HoverChanged(true));\n\n          this.eventBus.dispatch(new TableEvents.RowHover(event.targetCell.rowId));\n          this.eventBus.dispatch(new TableEvents.ColumnHover(event.targetCell.columnId));\n        }\n      );\n  }\n}\n","import { ClientUiStateHandlerService } from '@bimeister/pupakit.common';\nimport { filterNotNil, isNil, Nullable, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { asapScheduler, BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, subscribeOn, switchMap, take, tap } from 'rxjs/operators';\nimport { TableAdaptiveColumnSizes } from '../interfaces/table-adaptive-column-sizes.interface';\nimport { TableColumnSizes } from '../interfaces/table-column-sizes.interface';\n\nconst BREAKPOINTS: string[] = ['xxl', 'xl', 'xlg', 'lg', 'md', 'sm', 'xs'];\n\nconst UNDEFINED_SIZES: TableColumnSizes = {\n  widthPx: 100,\n  minWidthPx: -Infinity,\n  maxWidthPx: Infinity,\n};\n\nexport class TableColumnSizeState {\n  private readonly defaultSizes$: BehaviorSubject<Nullable<TableColumnSizes>> = new BehaviorSubject<\n    Nullable<TableColumnSizes>\n  >(null);\n  private readonly adaptiveSizes$: BehaviorSubject<Nullable<TableAdaptiveColumnSizes>> = new BehaviorSubject<\n    Nullable<TableAdaptiveColumnSizes>\n  >(null);\n\n  private readonly breakpointToSizesMap$: Observable<Map<string, TableColumnSizes>> = combineLatest([\n    this.defaultSizes$,\n    this.adaptiveSizes$,\n  ]).pipe(\n    map(([defaultSizes, adaptiveSizes]: [Nullable<TableColumnSizes>, Nullable<TableAdaptiveColumnSizes>]) => {\n      const sanitizedSizes: TableColumnSizes = isNil(defaultSizes)\n        ? UNDEFINED_SIZES\n        : { ...UNDEFINED_SIZES, ...defaultSizes };\n      const breakpointToSizesMap: Map<string, TableColumnSizes> = new Map<string, TableColumnSizes>();\n\n      BREAKPOINTS.forEach((breakpoint: string, index: number) => {\n        const largerBreakpointSizes: TableColumnSizes =\n          index === 0 ? sanitizedSizes : breakpointToSizesMap.get(BREAKPOINTS[index - 1]);\n        breakpointToSizesMap.set(\n          breakpoint,\n          isNil(adaptiveSizes?.[breakpoint])\n            ? largerBreakpointSizes\n            : { ...UNDEFINED_SIZES, ...adaptiveSizes[breakpoint] }\n        );\n      });\n      return breakpointToSizesMap;\n    }),\n    shareReplayWithRefCount()\n  );\n\n  public readonly breakpoint$: Observable<Nullable<string>> = this.clientUiStateHandlerService.breakpoint$;\n\n  public readonly currentBreakpointSizes$: Observable<TableColumnSizes> = combineLatest([\n    this.breakpoint$.pipe(filterNotNil()),\n    this.breakpointToSizesMap$,\n  ]).pipe(\n    tap(() => this.fitWidthPxState$.next(null)),\n    map(([currentBreakpoint, breakpointToSizesMap]: [string, Map<string, TableColumnSizes>]) =>\n      breakpointToSizesMap.get(currentBreakpoint)\n    ),\n    shareReplayWithRefCount()\n  );\n\n  private readonly minWidthPx$: Observable<number> = this.currentBreakpointSizes$.pipe(\n    map((sizes: TableColumnSizes) => sizes.minWidthPx)\n  );\n  private readonly maxWidthPx$: Observable<number> = this.currentBreakpointSizes$.pipe(\n    map((sizes: TableColumnSizes) => sizes.maxWidthPx)\n  );\n  private readonly definitionWidthPxState$: Observable<number> = this.currentBreakpointSizes$.pipe(\n    map((sizes: TableColumnSizes) => sizes.widthPx)\n  );\n\n  private readonly userWidthPxState$: BehaviorSubject<Nullable<number>> = new BehaviorSubject<Nullable<number>>(null);\n  private readonly fitWidthPxState$: BehaviorSubject<Nullable<number>> = new BehaviorSubject<Nullable<number>>(null);\n\n  public readonly widthPx$: Observable<number> = combineLatest([\n    this.definitionWidthPxState$,\n    this.minWidthPx$,\n    this.maxWidthPx$,\n    this.userWidthPxState$,\n    this.fitWidthPxState$,\n  ]).pipe(\n    map(\n      ([widthPxState, minWidthPx, maxWidthPx, userPxState, fitWidthPxState]: [\n        number,\n        number,\n        number,\n        Nullable<number>,\n        Nullable<number>\n      ]) => {\n        if (!isNil(fitWidthPxState)) {\n          return fitWidthPxState;\n        }\n\n        const widthPx: number = userPxState ?? widthPxState;\n        if (!isNil(minWidthPx) && widthPx < minWidthPx) {\n          return minWidthPx;\n        }\n\n        if (!isNil(maxWidthPx) && widthPx > maxWidthPx) {\n          return maxWidthPx;\n        }\n        return widthPx;\n      }\n    ),\n    distinctUntilChanged()\n  );\n\n  constructor(private readonly clientUiStateHandlerService: ClientUiStateHandlerService) {}\n\n  public setDefinitionSizes(defaultSizes?: TableColumnSizes, adaptiveSizes?: TableAdaptiveColumnSizes): void {\n    this.defaultSizes$.next(defaultSizes);\n    this.adaptiveSizes$.next(adaptiveSizes);\n  }\n\n  public updateWidthByDeltaPx(deltaPx: number): Observable<boolean> {\n    const result$: Subject<boolean> = new Subject<boolean>();\n\n    this.widthPx$\n      .pipe(\n        take(1),\n        switchMap((widthPx: number) => {\n          const newWidth: number = widthPx + deltaPx;\n          return this.setWidth(newWidth);\n        })\n      )\n      .subscribe((result: boolean) => {\n        result$.next(result);\n        result$.complete();\n      });\n\n    return result$;\n  }\n\n  public setWidth(widthPx: number): Observable<boolean> {\n    const result$: Subject<boolean> = new Subject<boolean>();\n    this.fitWidthPxState$.next(null);\n\n    combineLatest([this.minWidthPx$, this.maxWidthPx$])\n      .pipe(take(1), subscribeOn(asapScheduler))\n      .subscribe(([minWidthPx, maxWidthPx]: [number, number]) => {\n        if (!isNil(minWidthPx) && widthPx < minWidthPx) {\n          this.userWidthPxState$.next(minWidthPx);\n          result$.next(false);\n          result$.complete();\n          return;\n        }\n\n        if (!isNil(maxWidthPx) && widthPx > maxWidthPx) {\n          this.userWidthPxState$.next(maxWidthPx);\n          result$.next(false);\n          result$.complete();\n          return;\n        }\n\n        this.userWidthPxState$.next(widthPx);\n        result$.next(true);\n        result$.complete();\n      });\n\n    return result$;\n  }\n\n  public setFitWidth(widthPx: number): void {\n    this.userWidthPxState$.next(null);\n    this.fitWidthPxState$.next(widthPx);\n  }\n}\n","import { EventBus } from '@bimeister/event-bus/rxjs';\nimport { ClientUiStateHandlerService, QueueEvents, SCROLLBAR_WIDTH_PX } from '@bimeister/pupakit.common';\nimport {\n  filterByInstanceOf,\n  filterTruthy,\n  isNil,\n  resizeObservable,\n  shareReplayWithRefCount,\n} from '@bimeister/utilities';\nimport { combineLatest, forkJoin, merge, NEVER, Observable, of, Subscription } from 'rxjs';\nimport { filter, map, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';\nimport { TableColumnEvents } from '../../events/table-column.events';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableEventTargetCellData } from '../../interfaces/table-event-target-cell-data.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\nimport { TableColumnSizeState } from '../table-column-size-state.class';\nimport { TableColumn } from '../table-column.class';\n\nexport class TableResizeFeature<T> implements TableFeature {\n  private readonly eventBus: EventBus = this.api.eventBus;\n  public readonly clientUiStateHandlerService: ClientUiStateHandlerService =\n    this.api.tableInjector.get(ClientUiStateHandlerService);\n\n  private readonly tableElement: HTMLElement = this.api.tableElement;\n\n  private readonly columnIdToColumnMap$: Observable<Map<string, TableColumn>> =\n    this.api.displayData.columnIdToColumnMap$;\n\n  private columnIdToColumnSizeStateMap: Map<string, TableColumnSizeState> = new Map<string, TableColumnSizeState>();\n  private readonly columnIdToColumnSizeStateMap$: Observable<Map<string, TableColumnSizeState>> =\n    this.columnIdToColumnMap$.pipe(\n      map((columnIdToColumnMap: Map<string, TableColumn>) => {\n        const newStatesMap: Map<string, TableColumnSizeState> = new Map<string, TableColumnSizeState>();\n\n        for (const [columnId, column] of columnIdToColumnMap.entries()) {\n          const sizeState: TableColumnSizeState =\n            this.columnIdToColumnSizeStateMap.get(columnId) ??\n            new TableColumnSizeState(this.clientUiStateHandlerService);\n          sizeState.setDefinitionSizes(column.definition.defaultSizes, column.definition.adaptiveSizes);\n          newStatesMap.set(columnId, sizeState);\n        }\n\n        this.columnIdToColumnSizeStateMap = newStatesMap;\n        return newStatesMap;\n      }),\n      shareReplayWithRefCount()\n    );\n\n  private readonly subscription: Subscription = new Subscription();\n\n  private currentResizableColumn: TableColumn | null = null;\n  private lastDeltaPx: number = 0;\n\n  private fitColumnsOnResizeSubscription: Subscription | null = null;\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processPanStart());\n    this.subscription.add(this.processPan());\n    this.subscription.add(this.processPanEnd());\n    this.subscription.add(this.processOuterStartFitColumnsOnResizeEvent());\n    this.subscription.add(this.processOuterStopFitColumnsOnResizeEvent());\n    this.subscription.add(this.processOuterFitColumnSizesEvent());\n    this.subscription.add(this.processOuterUpdateColumnWidthByDeltaEvent());\n    this.subscription.add(this.processOuterSetColumnWidthEvent());\n    this.subscription.add(this.processColumnWidthChanges());\n    this.subscription.add(this.processColumnRequestWidth());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n    this.stopFitColumnsOnResize();\n  }\n\n  private processPanStart(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.PanStart),\n        filter((event: TableEvents.PanStart) => !isNil(event.targetCell) && event.triggeredByResizer)\n      )\n      .subscribe((event: TableEvents.PanStart) => {\n        this.startResize(event.targetCell);\n      });\n  }\n\n  private processPan(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(filterByInstanceOf(TableEvents.Pan))\n      .subscribe((event: TableEvents.Pan) => this.updateColumnWidth(event));\n  }\n\n  private processPanEnd(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(filterByInstanceOf(TableEvents.PanEnd))\n      .subscribe(() => {\n        this.currentResizableColumn?.dispatchEvent(new TableColumnEvents.CurrentResizableChanged(false));\n        this.currentResizableColumn = null;\n        this.lastDeltaPx = 0;\n      });\n  }\n\n  private processOuterStartFitColumnsOnResizeEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.StartFitColumnsOnResize),\n        tap(() => this.startFitColumnsOnResize())\n      )\n      .subscribe((event: TableEvents.StartFitColumnsOnResize) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterStopFitColumnsOnResizeEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.StopFitColumnsOnResize),\n        tap(() => this.stopFitColumnsOnResize())\n      )\n      .subscribe((event: TableEvents.StopFitColumnsOnResize) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterFitColumnSizesEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.FitColumns),\n        tap(() => this.fitColumns())\n      )\n      .subscribe((event: TableEvents.FitColumns) => this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id)));\n  }\n\n  private processOuterUpdateColumnWidthByDeltaEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.UpdateColumnWidthByDelta),\n        withLatestFrom(this.columnIdToColumnSizeStateMap$),\n        map(\n          ([event, columnIdToSizeStateMap]: [\n            TableEvents.UpdateColumnWidthByDelta,\n            Map<string, TableColumnSizeState>\n          ]) => {\n            columnIdToSizeStateMap.get(event.columnId)?.updateWidthByDeltaPx(event.deltaPx);\n            return event;\n          }\n        )\n      )\n      .subscribe((event: TableEvents.UpdateColumnWidthByDelta) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterSetColumnWidthEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.SetColumnWidth),\n        withLatestFrom(this.columnIdToColumnSizeStateMap$),\n        map(([event, columnIdToSizeState]: [TableEvents.SetColumnWidth, Map<string, TableColumnSizeState>]) => {\n          columnIdToSizeState.get(event.columnId)?.setWidth(event.widthPx);\n          return event;\n        })\n      )\n      .subscribe((event: TableEvents.SetColumnWidth) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processColumnWidthChanges(): Subscription {\n    return this.columnIdToColumnSizeStateMap$\n      .pipe(\n        switchMap((columnIdToColumnSizeStateMap: Map<string, TableColumnSizeState>) => {\n          const widthStreams: Observable<[string, number]>[] = Array.from(columnIdToColumnSizeStateMap.entries()).map(\n            ([columnId, state]: [string, TableColumnSizeState]) =>\n              state.widthPx$.pipe(map((widthPx: number) => [columnId, widthPx]))\n          );\n\n          return merge(...widthStreams).pipe(withLatestFrom(this.columnIdToColumnMap$));\n        })\n      )\n      .subscribe(([[columnId, widthPx], columnIdToColumnMap]: [[string, number], Map<string, TableColumn>]) => {\n        columnIdToColumnMap.get(columnId)?.dispatchEvent(new TableColumnEvents.WidthChanged(widthPx));\n      });\n  }\n\n  private processColumnRequestWidth(): Subscription {\n    type MainSteamTuple = [TableColumnEvents.GetCurrentWidth, TableColumn, number];\n    type EventWithSizesTuple = [TableColumnEvents.GetCurrentWidth, Map<string, TableColumnSizeState>];\n\n    return this.columnIdToColumnMap$\n      .pipe(\n        switchMap((columnIdToColumnMap: Map<string, TableColumn>) => {\n          const streams: Observable<MainSteamTuple>[] = Array.from(columnIdToColumnMap.entries()).map(\n            ([columnId, column]: [string, TableColumn]) =>\n              column.listenEvent(TableColumnEvents.GetCurrentWidth).pipe(\n                withLatestFrom(this.columnIdToColumnSizeStateMap$),\n                switchMap(([event, columnIdToColumnSizeStateMap]: EventWithSizesTuple) => {\n                  const currentWidthPx$: Observable<number> =\n                    columnIdToColumnSizeStateMap.get(columnId).widthPx$.pipe(take(1)) ?? of(0);\n\n                  return forkJoin([of(event), of(column), currentWidthPx$]);\n                })\n              )\n          );\n\n          return merge(...streams);\n        })\n      )\n      .subscribe(([event, column, currentWidthPx]: MainSteamTuple) =>\n        column.dispatchEvent(new TableColumnEvents.CurrentWidthResponse(event.id, currentWidthPx))\n      );\n  }\n\n  private startResize(targetCell: TableEventTargetCellData): void {\n    this.columnIdToColumnMap$.pipe(take(1)).subscribe((columnIdToColumnMap: Map<string, TableColumn>) => {\n      this.lastDeltaPx = 0;\n      const targetColumn: TableColumn = columnIdToColumnMap.get(targetCell.columnId);\n      targetColumn.dispatchEvent(new TableColumnEvents.CurrentResizableChanged(true));\n      this.currentResizableColumn = targetColumn;\n    });\n  }\n\n  private updateColumnWidth(event: TableEvents.Pan): void {\n    const deltaPx: number = event.panDelta[0] - this.lastDeltaPx;\n\n    this.columnIdToColumnSizeStateMap$\n      .pipe(\n        take(1),\n        switchMap((columnIdToColumnSizeStateMap: Map<string, TableColumnSizeState>) => {\n          const columnId: string | undefined = this.currentResizableColumn?.definition.id;\n\n          if (isNil(columnId)) {\n            return NEVER;\n          }\n\n          const sizeState: TableColumnSizeState | undefined = columnIdToColumnSizeStateMap.get(columnId);\n\n          if (isNil(sizeState)) {\n            return NEVER;\n          }\n\n          const result$: Observable<boolean> = sizeState.updateWidthByDeltaPx(deltaPx);\n\n          return result$.pipe(\n            filterTruthy(),\n            switchMap(() => forkJoin([sizeState.widthPx$.pipe(take(1)), of(columnId)]))\n          );\n        })\n      )\n      .subscribe(([newWidthPx, columnId]: [number, string]) => {\n        this.eventBus.dispatch(new TableEvents.ColumnWidthChanged(newWidthPx, columnId));\n        this.lastDeltaPx = event.panDelta[0];\n      });\n  }\n\n  private startFitColumnsOnResize(): void {\n    this.fitColumnsOnResizeSubscription?.unsubscribe();\n    this.fitColumnsOnResizeSubscription = resizeObservable(this.tableElement).subscribe(() => {\n      this.fitColumns();\n    });\n  }\n\n  private stopFitColumnsOnResize(): void {\n    this.fitColumnsOnResizeSubscription?.unsubscribe();\n    this.fitColumnsOnResizeSubscription = null;\n  }\n\n  private fitColumns(): void {\n    combineLatest([\n      this.columnIdToColumnSizeStateMap$,\n      this.columnIdToColumnMap$,\n      this.clientUiStateHandlerService.breakpoint$,\n    ])\n      .pipe(take(1))\n      .subscribe(\n        ([columnIdToSizeStateMap, columnIdToColumnMap, breakpoint]: [\n          Map<string, TableColumnSizeState>,\n          Map<string, TableColumn>,\n          string\n        ]) => {\n          const columnsWithoutWidth: TableColumn[] = [];\n          let totalWidth: number = 0;\n\n          for (const column of columnIdToColumnMap.values()) {\n            const defaultWidth: number | undefined = column.definition.defaultSizes?.widthPx;\n            const breakpointWidth: number | undefined = column.definition.adaptiveSizes?.[breakpoint]?.widthPx;\n            const targetWidth: number | undefined = breakpointWidth ?? defaultWidth;\n\n            totalWidth += targetWidth ?? 0;\n\n            if (isNil(targetWidth)) {\n              columnsWithoutWidth.push(column);\n            }\n          }\n\n          const availableWidth: number = this.tableElement.clientWidth - totalWidth - SCROLLBAR_WIDTH_PX;\n\n          for (const column of columnsWithoutWidth) {\n            columnIdToSizeStateMap.get(column.definition.id).setFitWidth(availableWidth / columnsWithoutWidth.length);\n          }\n        }\n      );\n  }\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { QueueEvents } from '@bimeister/pupakit.common';\nimport { filterByInstanceOf } from '@bimeister/utilities';\nimport { Observable, Subscription } from 'rxjs';\nimport { map, withLatestFrom } from 'rxjs/operators';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\n\nexport class TableScrollFeature<T> implements TableFeature {\n  private readonly eventBus: EventBus = this.api.eventBus;\n  private readonly scrollBehavior$: Observable<ScrollBehavior> = this.api.displayData.scrollBehavior$;\n  private readonly cdkVirtualScrollViewportRef: CdkVirtualScrollViewport = this.api.cdkVirtualScrollViewportRef;\n\n  private readonly subscription: Subscription = new Subscription();\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processOuterScrollByIndexEvent());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private processOuterScrollByIndexEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.ScrollByIndex),\n        withLatestFrom(this.scrollBehavior$),\n        map(([event, scrollBehavior]: [TableEvents.ScrollByIndex, ScrollBehavior]) => {\n          this.cdkVirtualScrollViewportRef.scrollToIndex(event.index, scrollBehavior);\n          return event;\n        })\n      )\n      .subscribe((event: TableEvents.ScrollByIndex) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n}\n","import { ListRange } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  TemplateRef,\n  TrackByFunction,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterByInstanceOf, filterNotNil, isNil, Nullable } from '@bimeister/utilities';\nimport { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { TableBodyRow } from '../../../declarations/classes/table-body-row.class';\nimport { TableBodyRowsDataSource } from '../../../declarations/classes/table-body-rows-data-source.class';\nimport { TableColumn } from '../../../declarations/classes/table-column.class';\nimport { TableController } from '../../../declarations/classes/table-controller.class';\nimport { TableCommonFeature } from '../../../declarations/classes/table-internal-system-features/table-common-feature.class';\nimport { TableDndFeature } from '../../../declarations/classes/table-internal-system-features/table-dnd-feature.class';\nimport { TableHoverFeature } from '../../../declarations/classes/table-internal-system-features/table-hover-feature.class';\nimport { TableResizeFeature } from '../../../declarations/classes/table-internal-system-features/table-resize-feature.class';\nimport { TableScrollFeature } from '../../../declarations/classes/table-internal-system-features/table-scroll-feature.class';\nimport { TableRow } from '../../../declarations/classes/table-row.class';\nimport { TableRowType } from '../../../declarations/enums/table-row-type.enum';\nimport { TableEvents } from '../../../declarations/events/table.events';\nimport { TableApi } from '../../../declarations/interfaces/table-api.interface';\nimport { TableBodyCellContext } from '../../../declarations/interfaces/table-body-cell-context.interface';\nimport { TableCellHtmlElementDataset } from '../../../declarations/interfaces/table-cell-html-element-dataset.interface';\nimport { TableCellHtmlElement } from '../../../declarations/interfaces/table-cell-html-element.interface';\nimport { TableDataDisplayCollectionRef } from '../../../declarations/interfaces/table-data-display-collection-ref.interface';\nimport { TableEventTargetCellData } from '../../../declarations/interfaces/table-event-target-cell-data.interface';\nimport { TableFeature } from '../../../declarations/interfaces/table-feature.interface';\nimport { TableHeaderCellContext } from '../../../declarations/interfaces/table-header-cell-context.interface';\nimport { TableFeatureConstructor } from '../../../declarations/types/table-feature-constructor.type';\nimport { isTableCellHtmlElement } from '../../../declarations/type-guards/is-table-cell-html-element.type-guard';\nimport { TableColumnsIntersectionService } from '../../../services/table-columns-intersection.service';\nimport { TableScrollbarsService } from '../../../services/table-scrollbars.service';\nimport { TableTemplatesService } from '../../../services/table-templates.service';\n\nimport {\n  BusEventBase,\n  ClientUiStateHandlerService,\n  ComponentChange,\n  ComponentChanges,\n  QueueEvents,\n} from '@bimeister/pupakit.common';\nimport { ScrollableComponent } from '@bimeister/pupakit.kit';\n\nfunction isTriggeredByResizer(event: Event): boolean {\n  const targetPath: EventTarget[] = event.composedPath();\n  return targetPath.some((target: EventTarget) => target instanceof HTMLElement && 'resizer' in target.dataset);\n}\n\nfunction getCellHtmlElementFromEvent(event: Event): Nullable<TableCellHtmlElement> {\n  const targetPath: EventTarget[] = event.composedPath();\n\n  let element: Nullable<TableCellHtmlElement> = null;\n\n  for (const target of targetPath) {\n    if (!isTableCellHtmlElement(target)) {\n      continue;\n    }\n    element = target;\n  }\n\n  return element;\n}\n\nfunction convertCellHtmlElementToTargetCellData(\n  tableCellHtmlElement: Nullable<TableCellHtmlElement>\n): Nullable<TableEventTargetCellData> {\n  const cellData: Nullable<TableCellHtmlElementDataset> = tableCellHtmlElement?.dataset;\n\n  return isNil(cellData)\n    ? null\n    : {\n        index: Number(cellData.index),\n        columnId: cellData.columnId,\n        rowId: cellData.rowId,\n        rowType: cellData.rowType,\n        element: tableCellHtmlElement,\n      };\n}\n\nfunction isTableRowType(input: string): input is TableRowType {\n  const enumKeys: TableRowType[] = [TableRowType.Body, TableRowType.Header];\n  return new Set<string>(enumKeys).has(input);\n}\n\n@Component({\n  selector: 'pupa-table',\n  templateUrl: './table.component.html',\n  styleUrls: ['./table.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [TableTemplatesService, TableColumnsIntersectionService, TableScrollbarsService],\n})\nexport class TableComponent<T> implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n  private readonly hammerManager: HammerManager = new Hammer.Manager(this.elementRef.nativeElement);\n\n  private readonly subscription: Subscription = new Subscription();\n\n  @ViewChild('table', { static: true })\n  public tableRef?: Nullable<ElementRef<HTMLElement>>;\n\n  @ViewChild('defaultHeaderCellTemplate', { static: true })\n  public defaultHeaderCellTemplateRef?: Nullable<TemplateRef<TableHeaderCellContext>>;\n\n  @ViewChild('defaultBodyCellTemplate', { static: true })\n  public defaultBodyCellTemplateRef?: Nullable<TemplateRef<TableBodyCellContext<T>>>;\n\n  @ViewChild('cdkVirtualScrollViewport', { static: true })\n  public cdkVirtualScrollViewportRef: Nullable<CdkVirtualScrollViewport>;\n\n  @ViewChild('headerScrollableContainer', { static: true })\n  public headerScrollableRowsContainerRef?: Nullable<ElementRef<HTMLElement>>;\n\n  @ViewChild('headerScrollableRowContainer', { read: ElementRef })\n  public headerScrollableRowContainerElementRef?: Nullable<ElementRef<HTMLElement>>;\n\n  @ViewChild('bodyScrollableContainer', { static: true })\n  public bodyScrollableContainerRef?: Nullable<ScrollableComponent>;\n\n  @ViewChild('decorScrollableRowContainer', { read: ElementRef })\n  public decorScrollableRowContainerElementRef?: Nullable<ElementRef<HTMLElement>>;\n\n  @Input() public controller: TableController<T>;\n  private readonly controller$: BehaviorSubject<Nullable<TableController<T>>> = new BehaviorSubject<TableController<T>>(\n    null\n  );\n  private readonly availableController$: Observable<TableController<T>> = this.controller$.pipe(filterNotNil());\n\n  public readonly isVerticalScrollBarVisible$: Observable<boolean> = this.tableScrollbarsService.isVerticalVisible$;\n  public readonly isHorizontalScrollBarVisible$: Observable<boolean> = this.tableScrollbarsService.isHorizontalVisible$;\n\n  private readonly dataDisplayCollection$: Observable<TableDataDisplayCollectionRef<T>> =\n    this.availableController$.pipe(map((controller: TableController<T>) => controller.getDataDisplayCollectionRef()));\n\n  public readonly data$: Observable<T[]> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.data$)\n  );\n\n  public readonly headerRowHeightPx$: Observable<number> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.headerRowHeightPx$)\n  );\n  public readonly bodyRowHeightPx$: Observable<number> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.bodyRowHeightPx$)\n  );\n\n  public readonly virtualScrollDataSource$: Observable<TableBodyRowsDataSource<T>> = this.dataDisplayCollection$.pipe(\n    map((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.virtualScrollDataSource)\n  );\n\n  public readonly pinnedLeftColumns$: Observable<TableColumn[]> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.pinnedLeftColumns$)\n  );\n\n  public readonly scrollableColumns$: Observable<TableColumn[]> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.scrollableColumns$)\n  );\n\n  public readonly pinnedRightColumns$: Observable<TableColumn[]> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.pinnedRightColumns$)\n  );\n\n  private readonly bodyRowIdToBodyRowMap$: Observable<Map<string, TableBodyRow<T>>> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.bodyRowIdToBodyRowMap$)\n  );\n\n  public readonly rows$: Observable<TableBodyRow<T>[]> = this.bodyRowIdToBodyRowMap$.pipe(\n    map((bodyRowIdToBodyRowMap: Map<string, TableBodyRow<T>>) => Array.from(bodyRowIdToBodyRowMap.values()))\n  );\n\n  public readonly headerRow$: Observable<TableRow> = this.dataDisplayCollection$.pipe(\n    map((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.headerRow)\n  );\n\n  public readonly placeholderRow$: Observable<TableRow> = this.dataDisplayCollection$.pipe(\n    map((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.placeholderRow)\n  );\n\n  public readonly trackBy$: Observable<TrackByFunction<T>> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.trackBy$)\n  );\n\n  public readonly minBufferPx$: Observable<number> = this.dataDisplayCollection$.pipe(\n    switchMap((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => dataDisplayCollection.minBufferPx$)\n  );\n\n  public readonly eventBus$: Observable<EventBus> = this.availableController$.pipe(\n    map((controller: TableController<T>) => controller.eventBus)\n  );\n\n  public readonly leftHiddenColumnsCount$: Observable<number> =\n    this.tableColumnsIntersectionService.leftHiddenColumnIds$.pipe(\n      map((leftHiddenColumnIds: string[]) => leftHiddenColumnIds.length)\n    );\n\n  public readonly rightHiddenColumnsCount$: Observable<number> =\n    this.tableColumnsIntersectionService.rightHiddenColumnIds$.pipe(\n      map((rightHiddenColumnIds: string[]) => rightHiddenColumnIds.length)\n    );\n\n  public readonly columnDndIndicatorOffsetLeft$: BehaviorSubject<Nullable<number>> = new BehaviorSubject<\n    Nullable<number>\n  >(null);\n\n  private readonly internalSystemFeatures: TableFeatureConstructor<T>[] = [\n    TableCommonFeature,\n    TableResizeFeature,\n    TableDndFeature,\n    TableScrollFeature,\n    TableHoverFeature,\n  ];\n  private activeInternalFeatures: TableFeature[] = [];\n  private activeExternalFeatures: TableFeature[] = [];\n\n  constructor(\n    private readonly tableTemplatesService: TableTemplatesService<T>,\n    public readonly clientUiStateHandlerService: ClientUiStateHandlerService,\n    private readonly tableColumnsIntersectionService: TableColumnsIntersectionService,\n    private readonly tableScrollbarsService: TableScrollbarsService,\n    private readonly renderer: Renderer2,\n    private readonly injector: Injector,\n    private readonly elementRef: ElementRef\n  ) {\n    this.initHammerEvents();\n  }\n\n  public readonly rowTrackByFunction: TrackByFunction<TableBodyRow<T>> = (index: number, _item: TableBodyRow<T>) =>\n    index;\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.processTableControllerChanges(changes.controller);\n  }\n\n  public ngOnInit(): void {\n    this.setCdkVirtualScrollContentWrapperWidth();\n    this.registerDefaultTemplates();\n\n    this.subscription.add(this.processListRangeChanges());\n    this.subscription.add(this.processHiddenColumnIdsChanges());\n    this.subscription.add(this.processColumnDndIndicatorPositionChanges());\n  }\n\n  public ngAfterViewInit(): void {\n    this.subscription.add(this.updateDataTableSizesOnWindowResize());\n    this.subscription.add(this.setFeaturesOnApiDataChanges());\n\n    this.startEventsQueue();\n    this.registerHeaderScrollableContainerForIntersectionDetection();\n    this.measureFirstVisibleListRange();\n  }\n\n  public ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n    this.disposeFeatures();\n    this.hammerManager.destroy();\n  }\n\n  public processVerticalScrollBarVisibilityChanges(isVisible: boolean): void {\n    this.tableScrollbarsService.isVerticalVisible$.next(isVisible);\n    this.dispatchEvent(new TableEvents.VerticalScrollBarVisibilityChanged(isVisible));\n  }\n\n  public processHorizontalScrollBarVisibilityChanges(isVisible: boolean): void {\n    this.tableScrollbarsService.isHorizontalVisible$.next(isVisible);\n    this.dispatchEvent(new TableEvents.HorizontalScrollBarVisibilityChanged(isVisible));\n  }\n\n  public processTableMouseEvent(event: MouseEvent): void {\n    const element: Nullable<TableCellHtmlElement> = getCellHtmlElementFromEvent(event);\n    this.dispatchEvent(new TableEvents.MouseOver(convertCellHtmlElementToTargetCellData(element)));\n  }\n\n  public processClick(event: Event): void {\n    const element: Nullable<TableCellHtmlElement> = getCellHtmlElementFromEvent(event);\n\n    if (isNil(element)) {\n      return;\n    }\n\n    const cellData: TableCellHtmlElementDataset = element.dataset;\n\n    if (!isTableRowType(cellData.rowType)) {\n      return;\n    }\n\n    this.dispatchEvent(new TableEvents.CellClick(convertCellHtmlElementToTargetCellData(element)));\n  }\n\n  public processPanStart(event: HammerInput): void {\n    const element: Nullable<TableCellHtmlElement> = getCellHtmlElementFromEvent(event.srcEvent);\n    this.dispatchEvent(\n      new TableEvents.PanStart(\n        convertCellHtmlElementToTargetCellData(element),\n        isTriggeredByResizer(event.srcEvent),\n        event.pointerType\n      )\n    );\n  }\n\n  public processPan(event: HammerInput): void {\n    const srcEvent: Event = event.srcEvent;\n\n    if (!(srcEvent instanceof PointerEvent)) {\n      return;\n    }\n\n    const element: Nullable<TableCellHtmlElement> = getCellHtmlElementFromEvent(srcEvent);\n\n    this.dispatchEvent(\n      new TableEvents.Pan(\n        convertCellHtmlElementToTargetCellData(element),\n        [event.deltaX, event.deltaY],\n        [srcEvent.clientX, srcEvent.clientY]\n      )\n    );\n  }\n\n  public processPanEnd(event: HammerInput): void {\n    const element: Nullable<TableCellHtmlElement> = getCellHtmlElementFromEvent(event.srcEvent);\n    this.dispatchEvent(new TableEvents.PanEnd(convertCellHtmlElementToTargetCellData(element)));\n  }\n\n  public processBodyScrollLeftChanges(scrollLeft: number): void {\n    const scrollableHeaderCells: HTMLElement = this.headerScrollableRowContainerElementRef?.nativeElement;\n    const scrollableDecorCells: HTMLElement = this.decorScrollableRowContainerElementRef?.nativeElement;\n    this.renderer.setStyle(scrollableHeaderCells, 'transform', `translateX(${-scrollLeft}px)`);\n    this.renderer.setStyle(scrollableDecorCells, 'transform', `translateX(${-scrollLeft}px)`);\n  }\n\n  private initHammerEvents(): void {\n    this.hammerManager.add(new Hammer.Pan({ direction: Hammer.DIRECTION_ALL, threshold: 0, velocity: 0 }));\n    this.hammerManager.add(new Hammer.Press());\n\n    this.hammerManager.on('panstart', (event: HammerInput) => this.processPanStart(event));\n    this.hammerManager.on('pan', (event: HammerInput) => this.processPan(event));\n    this.hammerManager.on('panend', (event: HammerInput) => this.processPanEnd(event));\n  }\n\n  private startEventsQueue(): void {\n    this.dispatchEvent(new QueueEvents.StartQueue());\n  }\n\n  private measureFirstVisibleListRange(): void {\n    this.dataDisplayCollection$.pipe(take(1)).subscribe((dataDisplayCollection: TableDataDisplayCollectionRef<T>) => {\n      this.cdkVirtualScrollViewportRef.checkViewportSize();\n      const viewportSizePx: number = this.cdkVirtualScrollViewportRef.getViewportSize();\n\n      dataDisplayCollection.setTableViewportSizePx(viewportSizePx);\n      dataDisplayCollection.measureFirstVisibleListRange();\n    });\n  }\n\n  private processTableControllerChanges(change: ComponentChange<this, TableController<T>>): void {\n    const controller: TableController<T> = change?.currentValue;\n    if (isNil(controller)) {\n      return;\n    }\n    this.controller$.next(controller);\n  }\n\n  /**\n   * @description\n   * Angular shit: 🩼🦯🤡 content need max width from table element.\n   * Use this method instead of :ng-deep\n   */\n  private setCdkVirtualScrollContentWrapperWidth(): void {\n    const cdkVirtualScrollElement: HTMLElement = this.cdkVirtualScrollViewportRef.elementRef.nativeElement;\n    if (!(cdkVirtualScrollElement.firstChild instanceof HTMLElement)) {\n      return;\n    }\n    const cdkVirtualScrollContentWrapperElement: HTMLElement = cdkVirtualScrollElement.firstChild;\n    this.renderer.setStyle(cdkVirtualScrollContentWrapperElement, 'width', '100%');\n  }\n\n  private registerDefaultTemplates(): void {\n    this.tableTemplatesService.registerDefaultTemplates({\n      headerCell: this.defaultHeaderCellTemplateRef,\n      bodyCell: this.defaultBodyCellTemplateRef,\n    });\n  }\n\n  private processListRangeChanges(): Subscription {\n    return this.virtualScrollDataSource$\n      .pipe(\n        take(1),\n        switchMap((virtualScrollDataSource: TableBodyRowsDataSource<T>) => virtualScrollDataSource.listRange$)\n      )\n      .subscribe((listRange: ListRange) => this.dispatchEvent(new TableEvents.ListRangeChanged(listRange)));\n  }\n\n  private processHiddenColumnIdsChanges(): Subscription {\n    return combineLatest([\n      this.tableColumnsIntersectionService.leftHiddenColumnIds$,\n      this.tableColumnsIntersectionService.rightHiddenColumnIds$,\n    ]).subscribe(([leftHiddenColumnIds, rightHiddenColumnIds]: [string[], string[]]) =>\n      this.dispatchEvent(new TableEvents.HiddenColumnIdsChanged(leftHiddenColumnIds, rightHiddenColumnIds))\n    );\n  }\n\n  private updateDataTableSizesOnWindowResize(): Subscription {\n    return this.clientUiStateHandlerService.windowSquare$\n      .pipe(\n        map(() => {\n          const { clientWidth, clientHeight }: HTMLElement = this.tableRef.nativeElement;\n          return { tableWidthPx: clientWidth, tableHeightPx: clientHeight };\n        }),\n        withLatestFrom(this.dataDisplayCollection$)\n      )\n      .subscribe(\n        ([{ tableWidthPx, tableHeightPx }, dataDisplayCollection]: [\n          { tableWidthPx: number; tableHeightPx: number },\n          TableDataDisplayCollectionRef<T>\n        ]) => {\n          dataDisplayCollection.setTableWidthPx(tableWidthPx);\n          dataDisplayCollection.setTableHeightPx(tableHeightPx);\n        }\n      );\n  }\n\n  private registerHeaderScrollableContainerForIntersectionDetection(): void {\n    const headerScrollableRowsContainer: HTMLElement = this.headerScrollableRowsContainerRef.nativeElement;\n    this.tableColumnsIntersectionService.registerScrollArea(headerScrollableRowsContainer);\n  }\n\n  private setFeaturesOnApiDataChanges(): Subscription {\n    return combineLatest([this.eventBus$, this.dataDisplayCollection$]).subscribe(\n      ([eventBus, dataDisplayCollection]: [EventBus, TableDataDisplayCollectionRef<T>]) => {\n        this.disposeFeatures();\n\n        const tableApi: TableApi<T> = {\n          eventBus,\n          displayData: dataDisplayCollection,\n          bodyScrollableContainerRef: this.bodyScrollableContainerRef,\n          cdkVirtualScrollViewportRef: this.cdkVirtualScrollViewportRef,\n          templatesRegistry: this.tableTemplatesService,\n          tableInjector: this.injector,\n          tableElement: this.tableRef.nativeElement,\n        };\n\n        for (const featureConstructor of this.internalSystemFeatures) {\n          this.activeInternalFeatures.push(new featureConstructor(tableApi));\n        }\n\n        for (const featureConstructor of this.controller.features) {\n          this.activeExternalFeatures.push(new featureConstructor(tableApi));\n        }\n      }\n    );\n  }\n\n  private processColumnDndIndicatorPositionChanges(): Subscription {\n    return this.eventBus$\n      .pipe(\n        switchMap((eventBus: EventBus) => eventBus.listen()),\n        filterByInstanceOf(TableEvents.ColumnDragIndicatorPositionChange),\n        map((event: TableEvents.ColumnDragIndicatorPositionChange) => event.offsetLeft),\n        distinctUntilChanged()\n      )\n      .subscribe((offsetLeft: Nullable<number>) => {\n        this.columnDndIndicatorOffsetLeft$.next(offsetLeft);\n      });\n  }\n\n  private disposeFeatures(): void {\n    for (const feature of this.activeInternalFeatures) {\n      feature.dispose();\n    }\n    this.activeInternalFeatures = [];\n\n    for (const feature of this.activeExternalFeatures) {\n      feature.dispose();\n    }\n    this.activeExternalFeatures = [];\n  }\n\n  private dispatchEvent(event: BusEventBase): void {\n    this.eventBus$.pipe(take(1)).subscribe((eventBus: EventBus) => {\n      eventBus.dispatch(event);\n    });\n  }\n}\n","<div\n  #table\n  class=\"table\"\n  (mouseover)=\"processTableMouseEvent($event)\"\n  (mouseleave)=\"processTableMouseEvent($event)\"\n  (click)=\"processClick($event)\"\n>\n  <div class=\"table__header table-header\">\n    <div class=\"table-header__pinned-left-container\">\n      <pupa-table-header-row-container\n        *ngIf=\"headerRow$ | async as row\"\n        [row]=\"row\"\n        [columns]=\"pinnedLeftColumns$ | async\"\n        class=\"table-row table-row_header\"\n        [class.table-row_hovered]=\"row.isHovered$ | async\"\n        [style.height.px]=\"headerRowHeightPx$ | async\"\n      ></pupa-table-header-row-container>\n\n      <div\n        class=\"table-header__hidden-columns-count table-header__hidden-columns-count_left\"\n        *ngIf=\"(leftHiddenColumnsCount$ | async) > 0\"\n      >\n        {{ leftHiddenColumnsCount$ | async | formatCount }}\n      </div>\n    </div>\n\n    <div class=\"table-header__scrollable-container\" #headerScrollableContainer>\n      <pupa-table-header-row-container\n        #headerScrollableRowContainer\n        *ngIf=\"headerRow$ | async as row\"\n        [row]=\"row\"\n        [columns]=\"scrollableColumns$ | async\"\n        class=\"table-row table-row_header\"\n        [class.table-row_hovered]=\"row.isHovered$ | async\"\n        [style.height.px]=\"headerRowHeightPx$ | async\"\n      ></pupa-table-header-row-container>\n    </div>\n\n    <div class=\"table-header__pinned-right-container\">\n      <div\n        class=\"table-header__hidden-columns-count table-header__hidden-columns-count_right\"\n        *ngIf=\"(rightHiddenColumnsCount$ | async) > 0\"\n      >\n        {{ rightHiddenColumnsCount$ | async | formatCount }}\n      </div>\n\n      <pupa-table-header-row-container\n        *ngIf=\"headerRow$ | async as row\"\n        [row]=\"row\"\n        [columns]=\"pinnedRightColumns$ | async\"\n        class=\"table-row table-row_header\"\n        [class.table-row_hovered]=\"row.isHovered$ | async\"\n        [style.height.px]=\"headerRowHeightPx$ | async\"\n      ></pupa-table-header-row-container>\n    </div>\n  </div>\n\n  <div class=\"table__body table-body\">\n    <pupa-scrollable\n      class=\"table-body__scrollable\"\n      [size]=\"'large'\"\n      (verticalScrollVisibilityChanged)=\"processVerticalScrollBarVisibilityChanges($event)\"\n      [position]=\"'external'\"\n    >\n      <cdk-virtual-scroll-viewport\n        #cdkVirtualScrollViewport\n        pupaScrollableContent\n        class=\"table-body__scroll-viewport\"\n        [itemSize]=\"bodyRowHeightPx$ | async\"\n        [minBufferPx]=\"minBufferPx$ | async\"\n      >\n        <ng-container\n          *cdkVirtualFor=\"let row of virtualScrollDataSource$ | async; trackBy: trackBy$ | async\"\n        ></ng-container>\n\n        <div class=\"table-decor\">\n          <div class=\"table-placeholder__pinned-left-container table-decor__pinned-left-container\">\n            <pupa-table-placeholder-row-container\n              class=\"table-row table-row_decor\"\n              [isFullHeightCells]=\"true\"\n              [row]=\"placeholderRow$ | async\"\n              [columns]=\"pinnedLeftColumns$ | async\"\n            ></pupa-table-placeholder-row-container>\n          </div>\n\n          <div class=\"table-placeholder__scrollable-container table-decor__scrollable-container\">\n            <pupa-table-placeholder-row-container\n              #decorScrollableRowContainer\n              class=\"table-row table-row_decor\"\n              [isFullHeightCells]=\"true\"\n              [row]=\"placeholderRow$ | async\"\n              [columns]=\"scrollableColumns$ | async\"\n            ></pupa-table-placeholder-row-container>\n          </div>\n\n          <div class=\"table-placeholder__pinned-right-container table-decor__pinned-right-container\">\n            <pupa-table-placeholder-row-container\n              class=\"table-row table-row_decor\"\n              [isFullHeightCells]=\"true\"\n              [row]=\"placeholderRow$ | async\"\n              [columns]=\"pinnedRightColumns$ | async\"\n            ></pupa-table-placeholder-row-container>\n          </div>\n        </div>\n\n        <div class=\"table-body__scroll-viewport-container\">\n          <div class=\"table-body__pinned-left-container\">\n            <pupa-table-body-row-container\n              *ngFor=\"let row of rows$ | async; trackBy: rowTrackByFunction\"\n              class=\"table-row\"\n              [class.table-row_hovered]=\"row.isHovered$ | async\"\n              [class.table-row_selected]=\"row.isSelected$ | async\"\n              [style.height.px]=\"bodyRowHeightPx$ | async\"\n              [row]=\"row\"\n              [columns]=\"pinnedLeftColumns$ | async\"\n            ></pupa-table-body-row-container>\n          </div>\n\n          <pupa-scrollable\n            class=\"table-body__scrollable-container\"\n            #bodyScrollableContainer\n            [size]=\"'large'\"\n            [syncWith]=\"[placeholderScrollableContainer]\"\n            (scrollLeftChanged)=\"processBodyScrollLeftChanges($event)\"\n            [invisibleScrollbars]=\"['horizontal']\"\n          >\n            <pupa-table-body-row-container\n              *ngFor=\"let row of rows$ | async; trackBy: rowTrackByFunction\"\n              class=\"table-row\"\n              [class.table-row_hovered]=\"row.isHovered$ | async\"\n              [class.table-row_selected]=\"row.isSelected$ | async\"\n              [style.height.px]=\"bodyRowHeightPx$ | async\"\n              [row]=\"row\"\n              [columns]=\"scrollableColumns$ | async\"\n            ></pupa-table-body-row-container>\n          </pupa-scrollable>\n\n          <div class=\"table-body__pinned-right-container\">\n            <pupa-table-body-row-container\n              *ngFor=\"let row of rows$ | async; trackBy: rowTrackByFunction\"\n              class=\"table-row\"\n              [class.table-row_hovered]=\"row.isHovered$ | async\"\n              [class.table-row_selected]=\"row.isSelected$ | async\"\n              [style.height.px]=\"bodyRowHeightPx$ | async\"\n              [row]=\"row\"\n              [columns]=\"pinnedRightColumns$ | async\"\n            ></pupa-table-body-row-container>\n          </div>\n        </div>\n      </cdk-virtual-scroll-viewport>\n    </pupa-scrollable>\n  </div>\n\n  <div\n    class=\"table__bottom-scrollbar table-bottom-scrollbar\"\n    [class.table-bottom-scrollbar_visible]=\"isHorizontalScrollBarVisible$ | async\"\n  >\n    <div class=\"table-bottom-scrollbar__pinned-left-container\">\n      <pupa-table-placeholder-row-container\n        class=\"table-row table-row_placeholder\"\n        [row]=\"placeholderRow$ | async\"\n        [columns]=\"pinnedLeftColumns$ | async\"\n      ></pupa-table-placeholder-row-container>\n    </div>\n\n    <pupa-scrollable\n      #placeholderScrollableContainer\n      class=\"table-bottom-scrollbar__scrollable-container\"\n      [size]=\"'large'\"\n      [syncWith]=\"[bodyScrollableContainer]\"\n      (scrollLeftChanged)=\"processBodyScrollLeftChanges($event)\"\n      (horizontalScrollVisibilityChanged)=\"processHorizontalScrollBarVisibilityChanges($event)\"\n      [class.table-bottom-scrollbar__scrollable-container_has-left-pinned]=\"(pinnedLeftColumns$ | async)?.length > 0\"\n      [class.table-bottom-scrollbar__scrollable-container_has-right-pinned]=\"(pinnedRightColumns$ | async)?.length > 0\"\n    >\n      <pupa-table-placeholder-row-container\n        class=\"table-row table-row_placeholder\"\n        [row]=\"placeholderRow$ | async\"\n        [columns]=\"scrollableColumns$ | async\"\n      ></pupa-table-placeholder-row-container>\n    </pupa-scrollable>\n\n    <div class=\"table-bottom-scrollbar__pinned-right-container\">\n      <pupa-table-placeholder-row-container\n        class=\"table-row table-row_placeholder\"\n        [row]=\"placeholderRow$ | async\"\n        [columns]=\"pinnedRightColumns$ | async\"\n      ></pupa-table-placeholder-row-container>\n    </div>\n  </div>\n\n  <ng-container *pupaLet=\"columnDndIndicatorOffsetLeft$ | async as offsetLeft\">\n    <div class=\"columns-dnd-indicator\" *ngIf=\"!(offsetLeft | isNullOrUndefined)\" [style.left.px]=\"offsetLeft\"></div>\n  </ng-container>\n</div>\n\n<ng-content></ng-content>\n\n<ng-template #defaultHeaderCellTemplate let-column let-isDndClone=\"isDndClone\">\n  <pupa-table-header-cell [column]=\"column\" [isDndClone]=\"isDndClone\">\n    {{ column.definition.title ?? '' }}\n  </pupa-table-header-cell>\n</ng-template>\n\n<ng-template #defaultBodyCellTemplate let-row let-column=\"column\">\n  <pupa-table-body-cell *ngIf=\"!(row.data | isNullOrUndefined); else skeleton\" [column]=\"column\">\n    {{ row.data[column.definition.modelKey] ?? '' }}\n  </pupa-table-body-cell>\n</ng-template>\n\n<ng-template #skeleton>\n  <pupa-table-skeleton></pupa-table-skeleton>\n</ng-template>\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { ModuleWithProviders, NgModule, Type } from '@angular/core';\nimport { appArrowFullBotIcon, appArrowFullTopIcon, PupaIconsModule } from '@bimeister/pupakit.icons';\n\nimport { CommonModule } from '@angular/common';\nimport { PupaCommonModule } from '@bimeister/pupakit.common';\nimport { PupaScrollableModule, PupaSkeletonModule } from '@bimeister/pupakit.kit';\nimport { TableBodyCellComponent } from './components/external-predefined/table-body-cell/table-body-cell.component';\nimport { TableHeaderCellComponent } from './components/external-predefined/table-header-cell/table-header-cell.component';\nimport { TableSkeletonComponent } from './components/external-predefined/table-skeleton/table-skeleton.component';\nimport { TableBodyCellContainerComponent } from './components/system/table-body-cell-container/table-body-cell-container.component';\nimport { TableBodyRowContainerComponent } from './components/system/table-body-row-container/table-body-row-container.component';\nimport { TableColumnTemplateComponent } from './components/system/table-column-template/table-column-template.component';\nimport { TableHeaderCellContainerComponent } from './components/system/table-header-cell-container/table-header-cell-container.component';\nimport { TableHeaderRowContainerComponent } from './components/system/table-header-row-container/table-header-row-container.component';\nimport { TablePlaceholderRowContainerComponent } from './components/system/table-placeholder-row-container/table-placeholder-row-container.component';\nimport { TableComponent } from './components/system/table/table.component';\nimport { TableBodyCellTemplateDirective } from './directives/table-cell-template.directive';\nimport { TableHeaderCellTemplateDirective } from './directives/table-header-cell-template.directive';\n\nconst INTERNAL_COMPONENTS: Type<unknown>[] = [\n  TableBodyCellContainerComponent,\n  TableHeaderCellContainerComponent,\n  TableBodyRowContainerComponent,\n  TableHeaderRowContainerComponent,\n  TablePlaceholderRowContainerComponent,\n];\n\nconst EXTERNAL_COMPONENTS: Type<unknown>[] = [\n  TableComponent,\n  TableColumnTemplateComponent,\n  TableHeaderCellComponent,\n  TableBodyCellComponent,\n  TableSkeletonComponent,\n];\n\nconst EXTERNAL_DIRECTIVES: Type<unknown>[] = [TableHeaderCellTemplateDirective, TableBodyCellTemplateDirective];\n\nconst IMPORTS: (Type<unknown> | ModuleWithProviders<unknown>)[] = [\n  CommonModule,\n  ScrollingModule,\n  PupaCommonModule,\n  PupaScrollableModule,\n  PupaSkeletonModule,\n  PupaIconsModule.forFeature([appArrowFullTopIcon, appArrowFullBotIcon]),\n];\n\n@NgModule({\n  declarations: [...INTERNAL_COMPONENTS, ...EXTERNAL_COMPONENTS, ...EXTERNAL_DIRECTIVES],\n  imports: IMPORTS,\n  exports: [...EXTERNAL_COMPONENTS, ...EXTERNAL_DIRECTIVES],\n})\nexport class PupaTableModule {}\n","import { ListRange } from '@angular/cdk/collections';\nimport { distinctUntilSerializedChanged, filterNotNil, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { isNil } from '@bimeister/utilities/common';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { debounceTime, map, tap, withLatestFrom } from 'rxjs/operators';\nimport { TableEvents } from '../events/table.events';\nimport { TablePagedDataProducerOptions } from '../interfaces/table-paged-data-producer-options.interface';\nimport { TableController } from './table-controller.class';\nimport { PagedVirtualScrollArguments, ListRangesIntersectionProducer } from '@bimeister/pupakit.common';\n\nconst DEFAULT_LIST_RANGE_CHANGES_DEBOUNCE_TIME_MS: number = 500;\nconst DEFAULT_ROWS_BUFFER_SIZE: number = 200;\n\nexport class TablePagedDataProducer<T> {\n  private readonly bodyInitialCountOfSkeletonRows: number = this.options?.bodyInitialCountOfSkeletonRows;\n\n  private readonly listRangeChangesDebounceTimeMs: number =\n    this.options?.listRangeChangesDebounceTimeMs ?? DEFAULT_LIST_RANGE_CHANGES_DEBOUNCE_TIME_MS;\n\n  private readonly rowsBufferSize: number = this.options?.rowsBufferSize ?? DEFAULT_ROWS_BUFFER_SIZE;\n\n  private readonly loadedSlice$: BehaviorSubject<ListRange | null> = new BehaviorSubject<ListRange | null>(null);\n\n  public readonly arguments$: Observable<PagedVirtualScrollArguments> = this.controller\n    .getEvents(TableEvents.ListRangeChanged)\n    .pipe(\n      filterNotNil(),\n      map(({ listRange }: TableEvents.ListRangeChanged) => listRange),\n      distinctUntilSerializedChanged(),\n      debounceTime(this.listRangeChangesDebounceTimeMs),\n      withLatestFrom(this.loadedSlice$),\n      map(([visibleSlice, loadedSlice]: [ListRange, ListRange | null]) =>\n        TablePagedDataProducer.getSliceToLoad(this.rowsBufferSize, visibleSlice, loadedSlice)\n      ),\n      filterNotNil(),\n      distinctUntilSerializedChanged(),\n      withLatestFrom(this.loadedSlice$),\n      tap(([sliceToLoad]: [ListRange, ListRange]) => this.loadedSlice$.next(sliceToLoad)),\n      map(([sliceToLoad, loadedSlice]: [ListRange, ListRange]) =>\n        ListRangesIntersectionProducer.getPagedVirtualScrollArguments(loadedSlice, sliceToLoad)\n      ),\n      shareReplayWithRefCount()\n    ) as Observable<PagedVirtualScrollArguments>;\n\n  constructor(\n    private readonly controller: TableController<T>,\n    private readonly options?: TablePagedDataProducerOptions\n  ) {\n    this.controller.setBodyInitialCountOfSkeletonRows(this.bodyInitialCountOfSkeletonRows);\n  }\n\n  private static getSliceToLoad(\n    rowsBufferSize: number,\n    visibleSlice: ListRange,\n    loadedSlice: ListRange | null = null\n  ): ListRange | undefined {\n    if (isNil(loadedSlice)) {\n      return TablePagedDataProducer.getSliceToLoadByVisibleSlice(visibleSlice, rowsBufferSize);\n    }\n\n    const needToLoadNewSlice: boolean = TablePagedDataProducer.isFirstSliceReachedSecond(visibleSlice, loadedSlice);\n    if (!needToLoadNewSlice) {\n      return;\n    }\n\n    return TablePagedDataProducer.getSliceToLoadByVisibleSlice(visibleSlice, rowsBufferSize);\n  }\n\n  private static getSliceToLoadByVisibleSlice(visibleSlice: ListRange, rowsBufferSize: number): ListRange {\n    const visibleSliceRowsCount: number = Math.floor(visibleSlice.end - visibleSlice.start);\n\n    if (rowsBufferSize < visibleSliceRowsCount) {\n      return {\n        start: visibleSlice.start,\n        end: visibleSlice.end,\n      };\n    }\n\n    const halfRowsBufferSize: number = Math.floor(rowsBufferSize / 2);\n\n    if (visibleSlice.start >= halfRowsBufferSize) {\n      return {\n        start: visibleSlice.start - halfRowsBufferSize,\n        end: visibleSlice.start + halfRowsBufferSize,\n      };\n    }\n\n    if (visibleSlice.end >= halfRowsBufferSize) {\n      return {\n        start: 0,\n        end: rowsBufferSize,\n      };\n    }\n\n    return {\n      start: 0,\n      end: halfRowsBufferSize,\n    };\n  }\n\n  private static isFirstSliceReachedSecond(firstSlice: ListRange, secondSlice: ListRange): boolean {\n    const { getFrom, getTo }: PagedVirtualScrollArguments =\n      ListRangesIntersectionProducer.getPagedVirtualScrollArguments(secondSlice, firstSlice);\n\n    return !isNil(getFrom) && !isNil(getTo);\n  }\n}\n","import { EventBus } from '@bimeister/event-bus/rxjs';\nimport { QueueEvents } from '@bimeister/pupakit.common';\nimport { filterByInstanceOf, filterNotNil, isNil } from '@bimeister/utilities';\nimport { merge, Observable, Subscription } from 'rxjs';\nimport { filter, map, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { TableColumnSorting } from '../../enums/table-column-sorting.enum';\nimport { TableRowType } from '../../enums/table-row-type.enum';\nimport { TableColumnEvents } from '../../events/table-column.events';\nimport { TableFeatureEvents } from '../../events/table-feature.events';\nimport { TableEvents } from '../../events/table.events';\nimport { TableApi } from '../../interfaces/table-api.interface';\nimport { TableEventTargetCellData } from '../../interfaces/table-event-target-cell-data.interface';\nimport { TableFeature } from '../../interfaces/table-feature.interface';\nimport { isTableColumnSortingOptions } from '../../type-guards/is-table-column-sorting-options.type-guard';\nimport { TableColumn } from '../table-column.class';\n\nexport class TableSortingFeature<T> implements TableFeature {\n  private readonly eventBus: EventBus = this.api.eventBus;\n  private readonly columnIdToColumnMap$: Observable<Map<string, TableColumn>> =\n    this.api.displayData.columnIdToColumnMap$;\n\n  private columnIdToColumnSortingStateMap: Map<string, TableColumnSorting> = new Map<string, TableColumnSorting>();\n  private readonly subscription: Subscription = new Subscription();\n\n  private dragStarted: boolean = false;\n  private resizeStarted: boolean = false;\n\n  constructor(private readonly api: TableApi<T>) {\n    this.subscription.add(this.processCellClick());\n    this.subscription.add(this.processColumnChanges());\n    this.subscription.add(this.processOuterToggleColumnSortingEvent());\n    this.subscription.add(this.processOuterSetColumnSortingEvent());\n    this.subscription.add(this.detectDragStart());\n    this.subscription.add(this.detectResizeStart());\n    this.subscription.add(this.processColumnRequestSorting());\n  }\n\n  public dispose(): void {\n    this.subscription.unsubscribe();\n  }\n\n  private processCellClick(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableEvents.CellClick),\n        filter(() => {\n          const isSortingAvailable: boolean = !this.dragStarted && !this.resizeStarted;\n\n          this.dragStarted = false;\n          this.resizeStarted = false;\n\n          return isSortingAvailable;\n        }),\n        map((event: TableEvents.CellClick) => event.targetCell),\n        filter((targetCell: TableEventTargetCellData) => targetCell.rowType === TableRowType.Header),\n        withLatestFrom(this.columnIdToColumnMap$),\n        map(([targetCell, columnIdToColumnMap]: [TableEventTargetCellData, Map<string, TableColumn>]) =>\n          columnIdToColumnMap.get(targetCell.columnId)\n        ),\n        filterNotNil(),\n        filter((column: TableColumn) => {\n          const featureOptions: unknown = column.definition.featureOptions;\n          const isSortable: boolean = isTableColumnSortingOptions(featureOptions)\n            ? featureOptions.sortable ?? true\n            : false;\n\n          return isSortable;\n        })\n      )\n      .subscribe((column: TableColumn) => {\n        const columnId: string = column.definition.id;\n\n        this.toggleSorting(columnId);\n      });\n  }\n\n  private processColumnChanges(): Subscription {\n    return this.columnIdToColumnMap$.subscribe((columnIdToColumnMap: Map<string, TableColumn>) => {\n      const newStatesMap: Map<string, TableColumnSorting> = new Map<string, TableColumnSorting>();\n\n      for (const [columnId, column] of columnIdToColumnMap.entries()) {\n        const featureOptions: unknown = column.definition.featureOptions;\n\n        if (!isTableColumnSortingOptions(featureOptions)) {\n          continue;\n        }\n\n        const defaultState: TableColumnSorting = featureOptions.defaultState ?? TableColumnSorting.None;\n\n        const sortingState: TableColumnSorting = this.columnIdToColumnSortingStateMap.get(columnId) ?? defaultState;\n\n        column.dispatchEvent(new TableColumnEvents.SortingChanged(sortingState));\n        newStatesMap.set(columnId, sortingState);\n      }\n\n      this.columnIdToColumnSortingStateMap = newStatesMap;\n    });\n  }\n\n  private processColumnRequestSorting(): Subscription {\n    type MainStreamTuple = [TableColumnEvents.GetCurrentSorting, TableColumn, TableColumnSorting];\n\n    return this.columnIdToColumnMap$\n      .pipe(\n        switchMap((columnIdToColumnMap: Map<string, TableColumn>) => {\n          const streams: Observable<MainStreamTuple>[] = Array.from(columnIdToColumnMap.entries()).map(\n            ([columnId, column]: [string, TableColumn]) =>\n              column.listenEvent(TableColumnEvents.GetCurrentSorting).pipe(\n                map((event: TableColumnEvents.GetCurrentSorting) => {\n                  const currentSorting: TableColumnSorting =\n                    this.columnIdToColumnSortingStateMap.get(columnId) ?? TableColumnSorting.Asc;\n\n                  return [event, column, currentSorting];\n                })\n              )\n          );\n\n          return merge(...streams);\n        })\n      )\n      .subscribe(([event, column, currentSorting]: MainStreamTuple) =>\n        column.dispatchEvent(new TableColumnEvents.CurrentSortingResponse(event.id, currentSorting))\n      );\n  }\n\n  private processOuterToggleColumnSortingEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableFeatureEvents.ToggleColumnSorting),\n        map((event: TableFeatureEvents.ToggleColumnSorting) => {\n          this.toggleSorting(event.columnId);\n          return event;\n        })\n      )\n      .subscribe((event: TableFeatureEvents.ToggleColumnSorting) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private processOuterSetColumnSortingEvent(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(\n        filterByInstanceOf(TableFeatureEvents.SetColumnSorting),\n        map((event: TableFeatureEvents.SetColumnSorting) => {\n          this.setSorting(event.columnId, event.sorting);\n          return event;\n        })\n      )\n      .subscribe((event: TableFeatureEvents.SetColumnSorting) =>\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id))\n      );\n  }\n\n  private detectDragStart(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(filterByInstanceOf(TableEvents.ColumnDragStart))\n      .subscribe(() => {\n        this.dragStarted = true;\n      });\n  }\n\n  private detectResizeStart(): Subscription {\n    return this.eventBus\n      .listen()\n      .pipe(filterByInstanceOf(TableEvents.ColumnWidthChanged))\n      .subscribe(() => {\n        this.resizeStarted = true;\n      });\n  }\n\n  private toggleSorting(columnId: string): void {\n    this.columnIdToColumnMap$\n      .pipe(\n        take(1),\n        map((columnIdToColumnMap: Map<string, TableColumn>) => columnIdToColumnMap.get(columnId)),\n        filter(() => !isNil(this.columnIdToColumnSortingStateMap.get(columnId)))\n      )\n      .subscribe((column: TableColumn) => {\n        const featureOptions: unknown = column.definition.featureOptions;\n        const defaultNoneAvailability: boolean = true;\n\n        const isNoneAvailable: boolean = isTableColumnSortingOptions(featureOptions)\n          ? featureOptions.isSortingNoneAvailable ?? defaultNoneAvailability\n          : defaultNoneAvailability;\n\n        const currentSorting: TableColumnSorting = this.columnIdToColumnSortingStateMap.get(columnId);\n\n        const sortings: TableColumnSorting[] = Object.values(TableColumnSorting);\n        const currentIndex: number = sortings.indexOf(currentSorting);\n        let newIndex: number = currentIndex + 1;\n        if (newIndex === sortings.length) {\n          newIndex = 0;\n        }\n\n        const newSorting: TableColumnSorting =\n          !isNoneAvailable && sortings[newIndex] === TableColumnSorting.None\n            ? sortings[newIndex + 1]\n            : sortings[newIndex];\n\n        this.setSorting(columnId, newSorting);\n      });\n  }\n\n  private setSorting(columnId: string, sorting: TableColumnSorting): void {\n    const currentSorting: TableColumnSorting = this.columnIdToColumnSortingStateMap.get(columnId);\n\n    if (currentSorting === sorting) {\n      return;\n    }\n\n    this.columnIdToColumnSortingStateMap.set(columnId, sorting);\n    this.eventBus.dispatch(new TableFeatureEvents.ColumnSortingChanged(sorting, columnId));\n    this.columnIdToColumnMap$\n      .pipe(\n        take(1),\n        map((columnIdToColumnMap: Map<string, TableColumn>) => columnIdToColumnMap.get(columnId)),\n        filterNotNil()\n      )\n      .subscribe((column: TableColumn) => {\n        column.dispatchEvent(new TableColumnEvents.SortingChanged(sorting));\n      });\n  }\n}\n"],"names":["i1","i2","i1.TableTemplatesService","i1.TableScrollbarsService","i3.TableBodyCellContainerComponent","i2.TableColumnsIntersectionService","i3","i3.TableHeaderCellContainerComponent","i3.TableColumnsIntersectionService","i4.TableScrollbarsService","i5","i8.TableBodyRowContainerComponent","i9.TableHeaderRowContainerComponent","i10.TablePlaceholderRowContainerComponent","i11.TableHeaderCellComponent","i12.TableBodyCellComponent","i13.TableSkeletonComponent","isNil"],"mappings":"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"}