{"version":3,"file":"fundamental-ngx-platform-table-helpers.mjs","sources":["../../../../libs/platform/table-helpers/table.ts","../../../../libs/platform/table-helpers/constants/tokens.ts","../../../../libs/platform/table-helpers/constants/index.ts","../../../../libs/platform/table-helpers/services/table.service.ts","../../../../libs/platform/table-helpers/services/table-responsive.service.ts","../../../../libs/platform/table-helpers/table-column.ts","../../../../libs/platform/table-helpers/directives/platform-table-column-responsive.directive.ts","../../../../libs/platform/table-helpers/directives/table-cell-header-popover.directive.ts","../../../../libs/platform/table-helpers/services/table-scroll-dispatcher.service.ts","../../../../libs/platform/table-helpers/services/table-column-resize.service.ts","../../../../libs/platform/table-helpers/directives/table-cell-resizable.directive.ts","../../../../libs/platform/table-helpers/table-cell.class.ts","../../../../libs/platform/table-helpers/directives/table-cell.directive.ts","../../../../libs/platform/table-helpers/enums/filter-type.enum.ts","../../../../libs/platform/table-helpers/enums/collection-filter.enum.ts","../../../../libs/platform/table-helpers/enums/column-align.enum.ts","../../../../libs/platform/table-helpers/enums/row-type.enum.ts","../../../../libs/platform/table-helpers/enums/selection-mode.enum.ts","../../../../libs/platform/table-helpers/enums/sort-direction.enum.ts","../../../../libs/platform/table-helpers/utils.ts","../../../../libs/platform/table-helpers/domain/table-data-provider.ts","../../../../libs/platform/table-helpers/domain/table-data-source.ts","../../../../libs/platform/table-helpers/domain/array-data-source.ts","../../../../libs/platform/table-helpers/domain/observable-data-source.ts","../../../../libs/platform/table-helpers/domain/data-source-parser.class.ts","../../../../libs/platform/table-helpers/directives/table-data-source.directive.ts","../../../../libs/platform/table-helpers/models/table-row.model.ts","../../../../libs/platform/table-helpers/helpers.ts","../../../../libs/platform/table-helpers/models/column-freeze-event.model.ts","../../../../libs/platform/table-helpers/models/columns-change-event.model.ts","../../../../libs/platform/table-helpers/models/directives.ts","../../../../libs/platform/table-helpers/models/filter-change-event.model.ts","../../../../libs/platform/table-helpers/models/group-change-event.model.ts","../../../../libs/platform/table-helpers/models/page-change-event.model.ts","../../../../libs/platform/table-helpers/models/save-rows-event.interface.ts","../../../../libs/platform/table-helpers/models/search-change-event.model.ts","../../../../libs/platform/table-helpers/models/selection-change-event.model.ts","../../../../libs/platform/table-helpers/models/sort-change-event.model.ts","../../../../libs/platform/table-helpers/models/table-cell-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-dialog-common-data.model.ts","../../../../libs/platform/table-helpers/models/table-row-activate-event.model.ts","../../../../libs/platform/table-helpers/models/table-row-toggle-open-state-event.model.ts","../../../../libs/platform/table-helpers/models/table-rows-rearrange-event.model.ts","../../../../libs/platform/table-helpers/directives/table-draggable.directive.ts","../../../../libs/platform/table-helpers/services/table-row.service.ts","../../../../libs/platform/table-helpers/directives/table-header-resizer.directive.ts","../../../../libs/platform/table-helpers/directives/table-header.directive.ts","../../../../libs/platform/table-helpers/directives/table-initial-state.directive.ts","../../../../libs/platform/table-helpers/directives/table-scrollable.directive.ts","../../../../libs/platform/table-helpers/directives/table-view-settings-filter-custom.directive.ts","../../../../libs/platform/table-helpers/directives/table-virtual-scroll.directive.ts","../../../../libs/platform/table-helpers/pipes/cell-styles.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-resizable-side.pipe.ts","../../../../libs/platform/table-helpers/pipes/column-sorting-direction.pipe.ts","../../../../libs/platform/table-helpers/pipes/row-classes.pipe.ts","../../../../libs/platform/table-helpers/pipes/selection-cell-styles.pipe.ts","../../../../libs/platform/table-helpers/table-helpers.module.ts","../../../../libs/platform/table-helpers/fundamental-ngx-platform-table-helpers.ts"],"sourcesContent":["import { ElementRef, EventEmitter, Injector, Signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { PresetManagedComponent } from '@fundamental-ngx/platform/shared';\nimport { Observable } from 'rxjs';\n\nimport { FocusableGridDirective, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { TableDataSource } from './domain';\nimport { SelectionModeValue } from './enums';\nimport { CollectionFilter } from './interfaces/collection-filter.interface';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { CollectionSort } from './interfaces/collection-sort.interface';\nimport { TableState } from './interfaces/table-state.interface';\nimport { PlatformTableManagedPreset, SaveRowsEvent, TableInitialState, TableRow, TableVirtualScroll } from './models';\nimport { TableScrollable } from './services/table-scroll-dispatcher.service';\nimport { TableColumn } from './table-column';\n\nexport abstract class Table<T = any> implements PresetManagedComponent<PlatformTableManagedPreset> {\n    abstract readonly name: string;\n\n    abstract readonly id: string;\n\n    abstract _loadPreviousPages: boolean;\n\n    abstract pageScrolling: boolean;\n\n    abstract loadPagesBefore: boolean;\n\n    abstract pageSize: Nullable<number>;\n\n    abstract freezeColumnsTo: string;\n\n    abstract freezeEndColumnsTo: string;\n\n    /** Event emitted when current preset configuration has been changed. */\n    abstract presetChanged: EventEmitter<PlatformTableManagedPreset>;\n\n    /** Sum of widths of fixed columns (semantic highlighting, selection) */\n    abstract get _fixedColumnsPadding(): number;\n\n    /** Freezable column names and their respective indexes */\n    abstract get _freezableColumns(): ReadonlyMap<string, number>;\n\n    /** Freezable column names and their respective indexes */\n    abstract get _freezableEndColumns(): ReadonlyMap<string, number>;\n\n    /** Width of the table element in px */\n    abstract get _tableWidthPx(): number;\n\n    abstract get loadingState(): boolean;\n\n    abstract initialState: TableInitialState | null;\n\n    /** Table columns definition list */\n    abstract readonly tableColumnsStream: Observable<TableColumn[]>;\n\n    abstract readonly injector: Injector;\n\n    abstract readonly tableContainer: ElementRef;\n\n    abstract readonly tableScrollMockContainer: ElementRef;\n\n    abstract readonly tableScrollable: TableScrollable;\n\n    abstract _virtualScrollDirective: TableVirtualScroll | null;\n\n    abstract _tableRowsVisible: TableRow<T>[];\n\n    abstract _tableRows: TableRow<T>[];\n\n    abstract loadedRows$: Signal<number>;\n\n    abstract _tableCurrentlyRenderedRowsPlaceholder: number[];\n\n    abstract _selectionMode: SelectionModeValue;\n\n    abstract contentDensityObserver: ContentDensityObserver;\n\n    abstract minimumColumnWidth: number;\n\n    abstract _focusableGrid: FocusableGridDirective;\n\n    /** Get table state */\n    abstract getTableState(): TableState;\n\n    /** Set table state */\n    abstract setTableState(tableState: TableState): void;\n\n    /** Get table columns definition list */\n    abstract getTableColumns(): TableColumn[];\n\n    /** Get a list of visible table columns. */\n    abstract getVisibleTableColumns(): TableColumn[];\n\n    /** Set Sorting rules */\n    abstract sort(sortRules: CollectionSort[]): void;\n\n    /** Add Sorting rules to the existing ones */\n    abstract addSort(sortRules: CollectionSort[]): void;\n\n    /** Set Filtering rules */\n    abstract filter(filterRules: CollectionFilter[]): void;\n\n    /** Add Filter rules to the existing ones */\n    abstract addFilter(filterRules: CollectionFilter[]): void;\n\n    /** Set grouping rules */\n    abstract group(groupRules: CollectionGroup[]): void;\n\n    /** Add Group rules to the existing ones */\n    abstract addGroup(groupRules: CollectionGroup[]): void;\n\n    /** Set table columns */\n    abstract setColumns(columns: string[]): void;\n\n    /** Toggle row checked state. */\n    abstract toggleSelectableRow(rowIndex: number): void;\n\n    /** Freeze table columns to including */\n    abstract freezeToColumn(columnKey: string, end?: boolean): void;\n\n    /** Unfreeze column */\n    abstract unfreeze(columnKey: string, end?: boolean): void;\n\n    /** Search in all table columns */\n    abstract search(searchInput: SearchInput): void;\n\n    /** Toolbar Sort Settings button visibility */\n    abstract showSortSettingsInToolbar(showSortSettings: boolean): void;\n\n    /** Toolbar Filter Settings button visibility */\n    abstract showFilterSettingsInToolbar(showFilterSettings: boolean): void;\n\n    /** Toolbar Group Settings button visibility */\n    abstract showGroupSettingsInToolbar(showGroupSettings: boolean): void;\n\n    /** Toolbar Columns Settings button visibility */\n    abstract showColumnSettingsInToolbar(showColumnSettings: boolean): void;\n\n    /** Toolbar Settings button visibility */\n    abstract showSettingsInToolbar(showSettings: boolean): void;\n\n    /** Disable filtering by header column menu */\n    abstract setHeaderColumnFilteringDisabled(disabled: boolean): void;\n\n    /** Set current page */\n    abstract setCurrentPage(currentPage: number): void;\n\n    /** Gets the max allowed width for all freezable columns */\n    abstract getMaxAllowedFreezableColumnsWidth(): number;\n\n    /** Get table data source */\n    abstract getDataSource(): TableDataSource<T>;\n\n    /** Manually triggers columns width recalculation */\n    abstract recalculateTableColumnWidth(): void;\n\n    /** Fetch data source data. */\n    abstract fetch(): void;\n\n    /** Adds empty row for editing at the beginning of the rows array. */\n    abstract addRow(): void;\n\n    /** Emits save event and resets editable rows array. */\n    abstract saveRows(): void;\n\n    /** Cancels editing and discards newly added rows */\n    abstract cancelEditing(): void;\n\n    /** Expand all the rows of the table */\n    abstract expandAll(): void;\n\n    /** Collapse all the rows of the table */\n    abstract collapseAll(): void;\n\n    /** Sets selected preset. */\n    abstract setPreset(data: PlatformTableManagedPreset): void;\n\n    /** Returns current preset. */\n    abstract getCurrentPreset(): PlatformTableManagedPreset;\n\n    abstract getCurrentlyRenderedRows(): number[];\n\n    abstract setCurrentlyRenderedRows(startIndex: number, length: number): void;\n\n    abstract toggleExpandableTableRow(row: TableRow<T>, forceFetch?: boolean);\n\n    abstract onTableRowsChanged(): void;\n\n    abstract refreshDndList(): void;\n\n    abstract clearTableRows(): void;\n\n    abstract _onSpyIntersect(intersected: boolean): void;\n\n    /** Toolbar Sort Settings button click event */\n    readonly openTableSortSettings: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Toolbar Filter Settings button click event */\n    readonly openTableFilterSettings: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Toolbar Group Settings button click event */\n    readonly openTableGroupSettings: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Toolbar Column Settings button click event */\n    readonly openTableColumnSettings: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Event fired when table state changes. */\n    readonly tableColumnFilterChange: EventEmitter<any> = new EventEmitter<void>();\n\n    /** Event fired when empty row added. */\n    readonly emptyRowAdded: EventEmitter<void>;\n\n    /** Event fired when save button pressed. */\n    readonly save: EventEmitter<SaveRowsEvent<T>>;\n\n    /** Event fired when cancel button pressed. */\n    readonly cancel: EventEmitter<void>;\n\n    /** Event fired when table is scrolled while using pageScrolling. */\n    readonly tableScrolled: EventEmitter<number>;\n}\n","import { InjectionToken } from '@angular/core';\nimport { TableDraggable, TableInitialState, TableVirtualScroll } from '../models';\n\nexport const FDP_TABLE_DRAGGABLE_DIRECTIVE = new InjectionToken<TableDraggable>('FdpTableDraggableDirective');\nexport const FDP_TABLE_STATE_DIRECTIVE = new InjectionToken<TableInitialState>('FdpTableStateDirective');\nexport const FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE = new InjectionToken<TableVirtualScroll>(\n    'FdpTableVirtualScrollDirective'\n);\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { CollectionPage, TableState } from '../interfaces';\n\nexport * from './tokens';\n\nexport const DEFAULT_TABLE_PAGE: Readonly<CollectionPage> = {\n    pageSize: 0,\n    currentPage: 1\n};\n\nexport const DEFAULT_TABLE_SEARCH_INPUT: Readonly<SearchInput> = {\n    text: '',\n    category: ''\n};\n\nexport const DEFAULT_TABLE_STATE: Readonly<TableState> = {\n    sortBy: [],\n    filterBy: [],\n    groupBy: [],\n    page: DEFAULT_TABLE_PAGE,\n    columns: [],\n    columnKeys: [],\n    freezeToColumn: null,\n    freezeToEndColumn: null,\n    searchInput: DEFAULT_TABLE_SEARCH_INPUT,\n    scrollTopPosition: 0\n};\n\nexport const DEFAULT_HIGHLIGHTING_KEY = 'semantic';\n\nexport const EDITABLE_ROW_SEMANTIC_STATE = 'information';\n\nexport const SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH = 6;\n\nexport const SELECTION_COLUMN_WIDTH: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n    [ContentDensityMode.COZY, 44],\n    [ContentDensityMode.COMPACT, 32],\n    [ContentDensityMode.CONDENSED, 32]\n]);\n\nexport const TABLE_COLUMN_MIN_WIDTH = 50;\n\nexport const ROW_HEIGHT: ReadonlyMap<ContentDensityMode, number> = new Map<ContentDensityMode, number>([\n    [ContentDensityMode.COZY, 44],\n    [ContentDensityMode.COMPACT, 32],\n    [ContentDensityMode.CONDENSED, 24]\n]);\n","import { Injectable, computed, signal } from '@angular/core';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { DEFAULT_TABLE_STATE } from '../constants';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { shallowEqual } from 'fast-equals';\nimport { CollectionFilter, CollectionGroup, CollectionPage, CollectionSort, TableState } from '../interfaces';\nimport {\n    ColumnsChange,\n    FilterChange,\n    FreezeChange,\n    GroupChange,\n    PageChange,\n    SearchChange,\n    SortChange\n} from '../models';\nimport { TableColumn } from '../table-column';\n\nexport type TableStateChange =\n    | TableStateProperty<'sort', SortChange>\n    | TableStateProperty<'page', PageChange>\n    | TableStateProperty<'filter', FilterChange>\n    | TableStateProperty<'group', GroupChange>\n    | TableStateProperty<'freeze', FreezeChange>\n    | TableStateProperty<'columns', ColumnsChange>\n    | TableStateProperty<'search', SearchChange>;\n\nexport type TableStateProperty<\n    T = 'sort' | 'page' | 'filter' | 'group' | 'freeze' | 'columns' | 'search',\n    P = SortChange | PageChange | FilterChange | GroupChange | FreezeChange | ColumnsChange\n> = {\n    type: T;\n    state: P;\n};\n\n@Injectable()\nexport class TableService {\n    /** Table state stream. */\n    readonly tableState$ = new BehaviorSubject(DEFAULT_TABLE_STATE);\n    /** @hidden */\n    readonly _semanticHighlighting$ = signal('');\n    /** @hidden */\n    readonly _isFilteringFromHeaderDisabled$ = signal(false);\n    /** @hidden */\n    readonly _isShownNavigationColumn$ = signal(false);\n    /** @hidden */\n    readonly _semanticHighlightingColumnWidth$ = signal(0);\n    /** Visible columns stream. */\n    readonly visibleColumns$ = signal<TableColumn[]>([]);\n    /** Visible columns length. */\n    visibleColumnsLength = computed(() => this.visibleColumns$().length);\n    /** Popping columns stream. */\n    readonly poppingColumns$ = signal<TableColumn[]>([]);\n    /** Popping columns length. */\n    _poppingColumnsLength = 0;\n    /** Table columns stream. */\n    readonly tableColumns$ = new BehaviorSubject<TableColumn[]>([]);\n    /** @hidden */\n    readonly tableStateChanges$ = this.tableState$.pipe(skip(1));\n    /** Stream that emits when search state changes. */\n    readonly searchChange$ = new Subject<SearchChange>();\n    /** Stream that emits when sort state changes. */\n    readonly sortChange$ = new Subject<SortChange>();\n    /** Stream that emits when filter state changes. */\n    readonly filterChange$ = new Subject<FilterChange>();\n    /** Stream that emits when group state changes. */\n    readonly groupChange$ = new Subject<GroupChange>();\n    /** Stream that emits when freeze state changes. */\n    readonly freezeChange$ = new Subject<FreezeChange>();\n    /** Stream that emits when columns state changes. */\n    readonly columnsChange$ = new Subject<ColumnsChange>();\n    /** Stream that emits when page state changes. */\n    readonly pageChange$ = new Subject<PageChange>();\n    /** Stream that emits when new fetch of data is needed. */\n    readonly needFetch$ = new Subject<void>();\n    /** @hidden */\n    readonly stateChange$ = new Subject<TableStateChange>();\n    /** Stream that emits when loading state changes. */\n    readonly tableLoading$ = new BehaviorSubject<boolean>(false);\n    /** Listen for soft changes in table subcomponents (mostly table column) */\n    readonly markForCheck$ = new Subject<void>();\n    /** Listen for immediate changes in table subcomponents (mostly table column) */\n    readonly detectChanges$ = new Subject<void>();\n    /** Sort rules stream. */\n    readonly sortRules$ = signal<Map<string, CollectionSort>>(new Map());\n    /**\n     * Filter Rules Map stream. Where key is column key, and value is the associated filter rules.\n     * Many filters can be applied to one column.\n     */\n    readonly filterRules$ = signal<Map<string, CollectionFilter[]>>(new Map());\n\n    /**\n     * Group Rules Map stream. Where key is column key and value is associated group rule\n     */\n    readonly groupRulesSubject = new BehaviorSubject<Map<string, CollectionGroup>>(new Map());\n\n    /** Group Rules Map signal. */\n    readonly groupRules$ = toSignal(this.groupRulesSubject);\n\n    /** Get current state/settings of the Table. */\n    getTableState(): TableState {\n        return this.tableState$.getValue();\n    }\n\n    /** Set current state/settings of the Table. */\n    setTableState(state: TableState): void {\n        this.tableState$.next(state);\n    }\n\n    /** Set current loading state of the Table. */\n    setTableLoading(isLoading: boolean): void {\n        this.tableLoading$.next(isLoading);\n    }\n\n    /** Notify about changes in table subcomponents (mostly table column) and detect them on next detector check. */\n    markForCheck(): void {\n        this.markForCheck$.next();\n    }\n\n    /** Notify about changes in table subcomponents (mostly table column) and detect them immediately. */\n    detectChanges(): void {\n        this.detectChanges$.next();\n    }\n\n    /** Search */\n    search(searchInput: SearchInput): void {\n        const prevState = this.getTableState();\n\n        const state: TableState = { ...prevState, searchInput };\n\n        this.setTableState(setCurrentPageToState(state, 1));\n\n        const evt = { current: searchInput, previous: prevState.searchInput };\n\n        this.needFetch$.next();\n        this.stateChange$.next({ type: 'search', state: evt });\n        this.searchChange$.next(evt);\n    }\n\n    /** Set new sort rules */\n    setSort(sortRules: CollectionSort[] | undefined): void {\n        const prevState = this.getTableState();\n        const prevSortRules = (prevState && prevState.sortBy) || [];\n\n        const newSortRules: CollectionSort[] = sortRules ? [...sortRules] : [];\n\n        const state: TableState = { ...prevState, sortBy: newSortRules };\n\n        if (!shallowEqual(prevSortRules, state.sortBy)) {\n            this.setTableState(setCurrentPageToState(state, 1));\n            this.buildSortRulesMap();\n            const evt = { current: state.sortBy, previous: prevSortRules };\n            this.buildSortRulesMap();\n\n            this.needFetch$.next();\n            this.stateChange$.next({ type: 'sort', state: evt });\n            this.sortChange$.next(evt);\n        }\n    }\n\n    /** Add sort rules to the existing ones */\n    addSort(sortRules: CollectionSort[]): void {\n        const prevState = this.getTableState();\n        const prevSortRules = (prevState && prevState.sortBy) || [];\n\n        const newSortRules: CollectionSort[] = [\n            ...prevSortRules.filter((existing) => !sortRules.find(({ field }) => field === existing.field)),\n            ...sortRules\n        ];\n\n        const state: TableState = { ...prevState, sortBy: newSortRules };\n\n        if (!shallowEqual(prevSortRules, state.sortBy)) {\n            this.setTableState(setCurrentPageToState(state, 1));\n            const evt = { current: state.sortBy, previous: prevSortRules };\n            this.buildSortRulesMap();\n\n            this.needFetch$.next();\n            this.stateChange$.next({ type: 'sort', state: evt });\n            this.sortChange$.next(evt);\n        }\n    }\n\n    /** Set new filter rules */\n    setFilters(filterRules: CollectionFilter[] | undefined): void {\n        const prevState = this.getTableState();\n        const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n        const newFilterRules: CollectionFilter[] = filterRules\n            ? filterRules.map((rule) => ({\n                  ...rule,\n                  fieldName: this._getFieldName(rule.field, rule.fieldName)\n              }))\n            : [];\n        const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n        if (!shallowEqual(prevFilterRules, state.filterBy)) {\n            this.setTableState(setCurrentPageToState(state, 1));\n            const evt = { current: state.filterBy, previous: prevFilterRules };\n\n            this.buildFilterRulesMap();\n            this.needFetch$.next();\n            this.stateChange$.next({ type: 'filter', state: evt });\n            this.filterChange$.next(evt);\n        }\n    }\n\n    /** Add filter rules to the existing ones */\n    addFilters(rulesToAdd: CollectionFilter[]): void {\n        const prevState = this.getTableState();\n        const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n        const newFilterRules: CollectionFilter[] = [\n            ...prevFilterRules.filter((existing) => !rulesToAdd.find(({ field }) => field === existing.field)),\n            ...rulesToAdd.map((rule) => ({\n                ...rule,\n                fieldName: this._getFieldName(rule.field, rule.fieldName)\n            }))\n        ];\n\n        const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n        if (!shallowEqual(prevFilterRules, state.filterBy)) {\n            this.setTableState(setCurrentPageToState(state, 1));\n            const evt = { current: state.filterBy, previous: prevFilterRules };\n            this.buildFilterRulesMap();\n\n            this.needFetch$.next();\n            this.stateChange$.next({ type: 'filter', state: evt });\n            this.filterChange$.next(evt);\n        }\n    }\n\n    /** Removes filters for the provided fields */\n    removeFilters(fields: string[]): void {\n        const prevState = this.getTableState();\n        const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n        const newFilterRules: CollectionFilter[] = prevFilterRules.filter(\n            (existing) => !fields.includes(existing.field)\n        );\n\n        const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n        this.setTableState(setCurrentPageToState(state, 1));\n        const evt = { current: state.filterBy, previous: prevFilterRules };\n        this.buildFilterRulesMap();\n\n        this.needFetch$.next();\n        this.stateChange$.next({ type: 'filter', state: evt });\n        this.filterChange$.next(evt);\n    }\n\n    /** Set group rules */\n    setGroups(groups: CollectionGroup[] | undefined): void {\n        const prevState = this.getTableState();\n        const prevGroups = (prevState && prevState.groupBy) || [];\n\n        const newGroups: CollectionGroup[] = groups ? [...groups] : [];\n        const state: TableState = { ...prevState, groupBy: newGroups };\n\n        if (!shallowEqual(prevGroups, state.groupBy)) {\n            this.setTableState(state);\n            const evt = { current: state.groupBy, previous: prevGroups };\n            this.buildGroupRulesMap();\n\n            this.stateChange$.next({ type: 'group', state: evt });\n            this.groupChange$.next(evt);\n        }\n    }\n\n    /** Add group rules to the existing ones */\n    addGroups(groupsToAdd: CollectionGroup[]): void {\n        const prevState = this.getTableState();\n        const prevGroups = (prevState && prevState.groupBy) || [];\n\n        const newGroups: CollectionGroup[] = [\n            ...prevGroups.filter((existing) => !groupsToAdd.find(({ field }) => field === existing.field)),\n            ...groupsToAdd\n        ];\n\n        const state: TableState = { ...prevState, groupBy: newGroups };\n\n        if (!shallowEqual(prevGroups, state.groupBy)) {\n            this.setTableState(state);\n            this.buildGroupRulesMap();\n\n            const evt = { current: state.groupBy, previous: prevGroups };\n            this.stateChange$.next({ type: 'group', state: evt });\n            this.groupChange$.next(evt);\n        }\n    }\n\n    /** Freeze table to column */\n    freezeTo(columnName: string | null, end?: boolean): void {\n        const prevState = this.getTableState();\n\n        if (!end) {\n            this.setTableState({ ...prevState, freezeToColumn: columnName });\n        } else {\n            this.setTableState({ ...prevState, freezeToEndColumn: columnName });\n        }\n\n        const evt = {\n            current: columnName,\n            previous: end ? prevState.freezeToEndColumn : prevState.freezeToColumn\n        };\n\n        this.stateChange$.next({ type: 'freeze', state: evt });\n        this.freezeChange$.next(evt);\n    }\n\n    /** Set table columns */\n    setColumns(columns: string[], keys: string[]): void {\n        const prevState = this.getTableState();\n        const prevColumns = (prevState && prevState.columns) || [];\n\n        const newColumns = [...columns];\n        const newColumnKeys = [...keys];\n        const state: TableState = { ...prevState, columns: newColumns, columnKeys: newColumnKeys };\n\n        if (!shallowEqual(prevColumns, state.columns)) {\n            this.setTableState(state);\n\n            const evt = { current: state.columns, previous: prevColumns };\n            this.stateChange$.next({ type: 'columns', state: evt });\n            this.columnsChange$.next(evt);\n        }\n    }\n\n    /** Set page. */\n    setCurrentPage(currentPage: number): void {\n        const prevState = this.getTableState();\n        const prevPageState = prevState.page;\n\n        if (prevPageState.currentPage === currentPage) {\n            return;\n        }\n\n        const state: TableState = setCurrentPageToState(prevState, currentPage);\n\n        this.setTableState(state);\n        const evt = { current: state.page, previous: prevPageState };\n\n        this.needFetch$.next();\n        this.stateChange$.next({ type: 'page', state: evt });\n        this.pageChange$.next(evt);\n    }\n\n    /** Set items per page. */\n    setItemsPerPage(itemsPerPage: number, resetPageNumber = true): void {\n        const prevState = this.getTableState();\n        const prevPageState = prevState.page;\n\n        if (prevPageState.pageSize === itemsPerPage) {\n            return;\n        }\n\n        let state: TableState = setPageSizeToState(prevState, itemsPerPage);\n\n        if (resetPageNumber) {\n            state = setCurrentPageToState(state, 1);\n        }\n\n        this.setTableState(state);\n        const evt = { current: state.page, previous: prevPageState };\n\n        this.needFetch$.next();\n        this.stateChange$.next({ type: 'page', state: evt });\n        this.pageChange$.next(evt);\n    }\n\n    /** Returns default table state. */\n    getDefaultState(): TableState {\n        const tableState = this.getTableState();\n        return {\n            columnKeys: tableState.columnKeys,\n            sortBy: [],\n            filterBy: [],\n            groupBy: [],\n            columns: tableState.columns,\n            searchInput: {\n                category: null,\n                text: ''\n            },\n            freezeToColumn: null,\n            freezeToEndColumn: null,\n            page: {\n                pageSize: 0,\n                currentPage: 1\n            },\n            scrollTopPosition: 0\n        };\n    }\n\n    /**\n     * Shares visible columns array across listeners.\n     * @param columns Visible columns to share.\n     */\n    setVisibleColumns(columns: TableColumn[]): void {\n        this.visibleColumns$.set(columns);\n    }\n\n    /**\n     * Shares popping columns array across listeners.\n     * @param columns Popping columns to share.\n     */\n    setPoppingColumns(columns: TableColumn[]): void {\n        this.poppingColumns$.set(columns);\n        this._poppingColumnsLength = columns.length;\n    }\n\n    /**\n     * Constructs grouping rules based on the table state.\n     * @param state Table state.\n     */\n    buildGroupRulesMap(state = this.getTableState()): void {\n        const groupMap = new Map(state.groupBy.map((rule) => [rule.field, rule]));\n        this.groupRulesSubject.next(groupMap);\n    }\n\n    /**\n     * Constructs sorting rules based on the table state.\n     * @param state Table state\n     */\n    buildSortRulesMap(state = this.getTableState()): void {\n        this.sortRules$.set(new Map(state.sortBy.filter((rule) => rule.field).map((rule) => [rule.field!, rule])));\n    }\n\n    /**\n     * Constructs filter rules based on the table state.\n     * @param state Table state.\n     */\n    buildFilterRulesMap(state = this.getTableState()): void {\n        const filterRulesWithFieldNames = state.filterBy.map((rule) => ({\n            ...rule,\n            fieldName: this._getFieldName(rule.field, rule.fieldName)\n        }));\n        this.filterRules$.set(\n            filterRulesWithFieldNames.reduce((hash, rule) => {\n                const key = rule.field;\n                if (!hash.has(key)) {\n                    hash.set(key, []);\n                }\n                hash.get(key)?.push(rule);\n                return hash;\n            }, new Map<string, CollectionFilter[]>())\n        );\n        const evt = { current: filterRulesWithFieldNames, previous: state.filterBy };\n\n        this.stateChange$.next({ type: 'filter', state: evt });\n    }\n\n    /** Reset all filter rules */\n    resetFilters(): void {\n        const prevState = this.getTableState();\n        const prevFilterRules = (prevState && prevState.filterBy) || [];\n\n        const newFilterRules: CollectionFilter[] = [];\n        const state: TableState = { ...prevState, filterBy: newFilterRules };\n\n        if (!shallowEqual(prevFilterRules, state.filterBy)) {\n            this.setTableState(setCurrentPageToState(state, 1));\n            const evt = { current: state.filterBy, previous: prevFilterRules };\n\n            this.buildFilterRulesMap();\n            this.needFetch$.next();\n            this.stateChange$.next({ type: 'filter', state: evt });\n            this.filterChange$.next(evt);\n        }\n    }\n\n    /**\n     * Constructs base table config.\n     */\n    constructTableMetadata(): void {\n        this.buildGroupRulesMap();\n        this.buildSortRulesMap();\n        this.buildFilterRulesMap();\n    }\n\n    /** @hidden */\n    private _getFieldName(field: string, fieldName: Nullable<string>): string {\n        const column = this.tableColumns$.getValue().find((col) => col.key === field);\n        return column ? column.name : (fieldName ?? field);\n    }\n}\n\n/** @hidden */\nfunction setCurrentPageToState(state: TableState, currentPage: number): TableState {\n    const newPageState: CollectionPage = { ...state.page, currentPage };\n    return { ...state, page: newPageState };\n}\n\n/** @hidden */\nfunction setPageSizeToState(state: TableState, pageSize: number): TableState {\n    const newPageState: CollectionPage = { ...state.page, pageSize };\n    return { ...state, page: newPageState };\n}\n","import { DestroyRef, ElementRef, Inject, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { Table } from '../table';\nimport { TableColumn } from '../table-column';\nimport { TableService } from './table.service';\n\nexport interface FdpTableBreakpoint {\n    min: number;\n    max: number;\n    visibility: FdpColumnResponsiveState;\n}\n\n@Injectable()\nexport class TableResponsiveService {\n    /** @hidden */\n    private readonly _responsiveBreakpoints = new Map<TableColumn, FdpTableBreakpoint[]>();\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private _resizeSubscription: Subscription | undefined;\n\n    /** @hidden */\n    constructor(\n        @Inject(Table) private readonly _table: Table,\n        private readonly _tableService: TableService,\n        private readonly _elmRef: ElementRef\n    ) {}\n\n    /**\n     * Registers responsive column with it's breakpoint configuration.\n     * @param column Table Column\n     * @param breakpoints Breakpoint configuration.\n     */\n    registerResponsiveColumn(column: TableColumn, breakpoints: Record<string, FdpColumnResponsiveState>): void {\n        this._responsiveBreakpoints.set(column, this._normalizeBreakpoints(breakpoints));\n\n        this._listenToTableResize();\n    }\n    /**\n     * @hidden\n     * Transforms plain breakpoints into a list with minimal/maximal element width with it's visibility state.\n     */\n    private _normalizeBreakpoints(breakpoints: Record<string, FdpColumnResponsiveState>): FdpTableBreakpoint[] {\n        const sortedBreakpoints = Object.keys(breakpoints)\n            .map((i) => parseInt(i, 10))\n            .sort((a, b) => a - b);\n        const newBreakpoints = sortedBreakpoints.reduce((result: FdpTableBreakpoint[], value, index, array) => {\n            result.push({\n                min: value,\n                max: index + 1 < array.length ? array[index + 1] - 1 : Infinity,\n                visibility: breakpoints[value.toString()]\n            });\n\n            return result;\n        }, []);\n\n        return newBreakpoints;\n    }\n\n    /**\n     * @hidden\n     * Listens to the table element resize and calculates columns visibility based on the current breakpoint.\n     */\n    private _listenToTableResize(): void {\n        this._resizeSubscription?.unsubscribe();\n\n        this._resizeSubscription = resizeObservable(this._elmRef.nativeElement)\n            .pipe(debounceTime(20), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                this._processResponsiveColumns();\n            });\n    }\n\n    /** @hidden */\n    private _processResponsiveColumns(): void {\n        let shouldNotify = false;\n        const { width } = this._elmRef.nativeElement.getBoundingClientRect();\n\n        this._responsiveBreakpoints.forEach((breakpoints, item) => {\n            const fittingBreakpoint = breakpoints.find(\n                (breakpoint) => breakpoint.min <= width && breakpoint.max >= width\n            );\n\n            if (fittingBreakpoint) {\n                shouldNotify = shouldNotify || item.responsiveState !== fittingBreakpoint.visibility;\n                item.responsiveState = fittingBreakpoint.visibility;\n            }\n        });\n\n        // Notify only when there's actual visibility changes to any of the columns.\n        if (!shouldNotify) {\n            return;\n        }\n\n        const currentTableColumns = this._table.getVisibleTableColumns().map((column) => column.name);\n\n        this._tableService.stateChange$.next({\n            type: 'columns',\n            state: { previous: currentTableColumns, current: currentTableColumns }\n        });\n\n        this._tableService.columnsChange$.next({ previous: currentTableColumns, current: currentTableColumns });\n    }\n}\n","import { Signal, TemplateRef } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\n\nimport { Observable } from 'rxjs';\nimport { ColumnAlignValue, FilterableColumnDataType } from './enums';\nimport { FdpColumnResponsiveState } from './interfaces';\n\nexport abstract class TableColumn {\n    /** Column unique identifier. */\n    abstract name: string;\n\n    /** Column data accessor key. */\n    abstract key: string;\n\n    /** Column header label. */\n    abstract label: string;\n\n    /** Column footer label. */\n    abstract footerLabel: string;\n\n    /** Emits when the label value changes. */\n    abstract labelValueChanges$: Observable<Nullable<string>>;\n\n    /** Cell text alignment. */\n    abstract align: ColumnAlignValue;\n\n    /** Toggles sort feature in the column header. */\n    abstract sortable: boolean;\n\n    /** Toggles filter feature in the column header. */\n    abstract filterable: boolean;\n\n    /** Data type the column represents. */\n    abstract dataType: FilterableColumnDataType;\n\n    /**\n     * Optional array of available filter options.\n     * Providing values to this input will cause the filter to change from a text-type input to a select-type input.\n     * */\n    abstract filterSelectOptions: string[];\n\n    /** Width of the column cells. */\n    abstract width: string;\n\n    /** Toggles grouping feature in the column header. */\n    abstract groupable: boolean;\n\n    /** Toggles freeze/unfreeze feature in the column header. */\n    abstract freezable: boolean;\n\n    /** Toggles end column freeze/unfreeze feature in the column header. */\n    abstract endFreezable: boolean;\n\n    /**  Whether the table cell inside table header should be non-interactive. */\n    abstract nonInteractive: boolean;\n\n    /** Initial visibility state of the column. */\n    abstract visible: boolean;\n\n    /** Column cell template for readonly mode. */\n    abstract columnCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column cell template for editing mode. */\n    abstract editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column header template. */\n    abstract headerCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column header template. */\n    abstract footerCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column header popover template. */\n    abstract headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n    /** Whether the text should wrap, when text is too long for 1 line. */\n    abstract noWrap: boolean;\n\n    /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n    abstract applyText: boolean;\n\n    /** Stores information for the header cell if the ellipsis are visible after the column resize */\n    abstract headerOverflows: boolean; // Not being used anywhere, is here for information\n\n    /** Whether this column is visible */\n    abstract responsiveState: FdpColumnResponsiveState;\n    /** Column role attribute. */\n    abstract role: 'cell' | 'rowheader' | 'gridcell';\n\n    /**\n     * Whether to announce built-in empty cells to screen readers for columns with column templates.\n     * This provides option to turn off the announcement if the column template already includes its own\n     * */\n    abstract announceEmptyCell: Signal<boolean>;\n\n    /** @hidden */\n    abstract _freezed: boolean;\n\n    /** @hidden */\n    abstract _endFreezed: boolean;\n}\n","import { Directive, Inject, Input, Optional } from '@angular/core';\nimport { shallowEqual } from 'fast-equals';\nimport { FdpColumnResponsiveState } from '../interfaces/column-responsive-state.interface';\nimport { TableResponsiveService } from '../services/table-responsive.service';\nimport { TableColumn } from '../table-column';\n\n@Directive({\n    selector: '[fdpTableColumnResponsive]',\n    standalone: true\n})\nexport class PlatformTableColumnResponsiveDirective {\n    /**\n     * Responsive breakpoints configuration.\n     * @param value where key is minimal table with and value is a column visibility type.\n     */\n    @Input('fdpTableColumnResponsive')\n    set breakpoints(value: Record<string, FdpColumnResponsiveState>) {\n        if (shallowEqual(value, this._breakpoints) || !this._column) {\n            return;\n        }\n        this._breakpoints = value;\n        this._responsiveTableService.registerResponsiveColumn(this._column, this._breakpoints);\n    }\n\n    get breakpoints(): Record<number, FdpColumnResponsiveState> {\n        return this._breakpoints;\n    }\n\n    /** @hidden */\n    private _breakpoints: Record<number, FdpColumnResponsiveState> = {};\n\n    /** @hidden */\n    constructor(\n        private readonly _responsiveTableService: TableResponsiveService,\n        @Optional() @Inject(TableColumn) private readonly _column: TableColumn | null\n    ) {}\n}\n","import { Directive, Signal, TemplateRef } from '@angular/core';\n\nexport interface TableCellHeaderPopoverDirectiveContext {\n    $implicit: Signal<TemplateRef<any>[]>;\n}\n\n@Directive({\n    selector: '[fdpTableCellHeaderPopover]',\n    standalone: true\n})\nexport class TableCellHeaderPopoverDirective {\n    /** @hidden */\n    constructor(public templateRef: TemplateRef<TableCellHeaderPopoverDirectiveContext>) {}\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        directive: TableCellHeaderPopoverDirective,\n        context: unknown\n    ): context is TableCellHeaderPopoverDirectiveContext {\n        return true;\n    }\n}\n","import { ElementRef, Injectable, InjectionToken, OnDestroy } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nexport interface TableScrollable {\n    /** Get scrollable ElementRef of. */\n    elementRef: ElementRef<HTMLElement>;\n\n    /** Returns observable that emits when a scroll event is fired on the host element. */\n    getScrollStream(): Observable<Event>;\n\n    /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n    getVerticalScrollStream(): Observable<Event>;\n\n    /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n    getHorizontalScrollStream(): Observable<Event>;\n\n    /** Returns scrollTop position of the host element. */\n    getScrollTop(): number;\n\n    /** Returns scrollLeft position of the host element. */\n    getScrollLeft(): number;\n\n    /** Set scrollTop position of the host element. */\n    setScrollTop(scrollTop: number, emitEvent: boolean): void;\n\n    /** Set scrollLeft position of the host element. */\n    setScrollLeft(scrollLeft: number, emitEvent: boolean): void;\n\n    /** Scrolls to overlapped cell. */\n    scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void;\n\n    /** Set Scroll Position during component initialization. */\n    initializeScrollTop(scrollTop: number): void;\n}\n\nexport const TABLE_SCROLLABLE = new InjectionToken<TableScrollable>('Table Scrollable');\n\n@Injectable()\nexport class TableScrollDispatcherService implements OnDestroy {\n    /** @hidden */\n    private _scrollSubject: Subject<TableScrollable> = new Subject();\n    /** @hidden */\n    private _verticalScrollSubject: Subject<TableScrollable> = new Subject();\n    /** @hidden */\n    private _horizontalScrollSubject: Subject<TableScrollable> = new Subject();\n    /** @hidden */\n    private _scrollableSubscriptionsMap: Map<TableScrollable, Subscription> = new Map();\n\n    /** @hidden */\n    register(scrollable: TableScrollable): void {\n        if (this._scrollableSubscriptionsMap.has(scrollable)) {\n            return;\n        }\n\n        const sub = new Subscription();\n        sub.add(scrollable.getScrollStream().subscribe(() => this._scrollSubject.next(scrollable)));\n        sub.add(scrollable.getHorizontalScrollStream().subscribe(() => this._horizontalScrollSubject.next(scrollable)));\n        sub.add(scrollable.getVerticalScrollStream().subscribe(() => this._verticalScrollSubject.next(scrollable)));\n\n        this._scrollableSubscriptionsMap.set(scrollable, sub);\n    }\n\n    /** @hidden */\n    deregister(scrollable: TableScrollable): void {\n        if (!this._scrollableSubscriptionsMap.has(scrollable)) {\n            return;\n        }\n\n        this._scrollableSubscriptionsMap.get(scrollable)?.unsubscribe();\n    }\n\n    /** Scroll stream */\n    scrolled(): Observable<TableScrollable> {\n        return this._scrollSubject.asObservable();\n    }\n\n    /** Horizontal scroll stream */\n    horizontallyScrolled(): Observable<TableScrollable> {\n        return this._horizontalScrollSubject.asObservable();\n    }\n\n    /** Vertical scroll stream */\n    verticallyScrolled(): Observable<TableScrollable> {\n        return this._verticalScrollSubject.asObservable();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        Array.from(this._scrollableSubscriptionsMap.values()).forEach((subscription) => subscription.unsubscribe());\n\n        this._scrollableSubscriptionsMap.clear();\n    }\n}\n","import { DestroyRef, ElementRef, Injectable, OnDestroy, computed, inject, signal } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Table } from '../table';\nimport { TableScrollDispatcherService } from './table-scroll-dispatcher.service';\n\nexport const TABLE_RESIZER_BORDER_WIDTH = 3;\n\n/**\n * Service to handle all things related to column resizing:\n * - Setting resizer\n * - Processing resize\n * - Calculating the real columns width\n */\n@Injectable()\nexport class TableColumnResizeService implements OnDestroy {\n    /** Subject that emits new map of fixed columns and their respective width. */\n    readonly fixedColumsWidthChange = new BehaviorSubject<Map<string, string>>(new Map());\n    /** Indicate if resizing process in progress. */\n    get resizeInProgress(): boolean {\n        return this._resizeInProgress;\n    }\n\n    /** Resize progress stream. */\n    readonly resizeInProgress$ = new BehaviorSubject<boolean>(false);\n\n    /** Whether cell mock should be visible. */\n    readonly cellMockVisible$ = signal(false);\n\n    /** Current column resizer position. */\n    get resizerPosition(): number {\n        return this._resizerPosition ?? 0;\n    }\n\n    /** Resizer position stream. */\n    readonly resizerPosition$ = new BehaviorSubject<number>(0);\n\n    /** Observable to notify to run CD */\n    get markForCheck(): Observable<void> {\n        return this._markForCheck.asObservable();\n    }\n\n    /** table has fixed width if all of it's columns are fixed */\n    get fixedWidth(): boolean {\n        return this._fixedColumnsWidthMap.size === this._visibleColumnNames.length;\n    }\n\n    /** @hidden */\n    private _fixedColumnsWidthMap = new Map<string, string>();\n\n    /** @hidden */\n    private _columnsCellMap = new Map<string, ElementRef<HTMLTableDataCellElement>[]>();\n\n    /** @hidden */\n    private _visibleColumnNames: string[] = [];\n\n    /** @hidden */\n    private _visibleColumnLeftNeighbourMap = new Map<string, string | undefined>();\n\n    /** @hidden */\n    private _visibleColumnRightNeighbourMap = new Map<string, string | undefined>();\n\n    /** @hidden */\n    private _visibleColumnLeftOffsetPxMap = new Map<string, number>();\n\n    /** @hidden */\n    private _visibleColumnRightOffsetPxMap = new Map<string, number>();\n\n    /** @hidden */\n    private _startX: number | null = null;\n\n    /** @hidden */\n    private _clientStartX: number | null = null;\n\n    /** @hidden */\n    private _resizeInProgress = this.resizeInProgress$.value;\n\n    /** @hidden */\n    private _resizedColumn: string;\n\n    /** @hidden */\n    private _resizerPosition: number | null = null;\n\n    /** @hidden */\n    private _scrollLeft = 0;\n\n    /** @hidden */\n    private _markForCheck = new Subject<void>();\n\n    /** @hidden */\n    private _destroyed = inject(DestroyRef);\n\n    /** @hidden */\n    private _resizerMoveSubscription = new Subscription();\n\n    /** @hidden */\n    private _tableRef: Table;\n\n    /** @hidden */\n    private _initialTableWidth: number | null = null;\n\n    /** @hidden */\n    private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    constructor(private readonly _tableScrollDispatcherService: TableScrollDispatcherService) {\n        this._tableScrollDispatcherService\n            ?.horizontallyScrolled()\n            .pipe(takeUntilDestroyed(this._destroyed))\n            .subscribe((scrollable) => {\n                this.resizerPosition$.next(0);\n                this._scrollLeft = scrollable.getScrollLeft();\n            });\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._resizeInProgress = false;\n        this.resizeInProgress$.next(false);\n\n        this._resizerMoveSubscription.unsubscribe();\n    }\n\n    /** @hidden */\n    setTableRef(ref: Table): void {\n        this._tableRef = ref;\n    }\n\n    /** @hidden initializes service with data, trigger columns width calculation. */\n    setColumnNames(visibleColumnNames: string[]): void {\n        this._visibleColumnLeftNeighbourMap.clear();\n        this._visibleColumnRightNeighbourMap.clear();\n        visibleColumnNames.forEach((column, index) => {\n            this._visibleColumnLeftNeighbourMap.set(column, visibleColumnNames[index - 1]);\n        });\n        visibleColumnNames.reverse().forEach((column, index) => {\n            this._visibleColumnRightNeighbourMap.set(column, visibleColumnNames[index - 1]);\n        });\n        this._visibleColumnNames = [...visibleColumnNames];\n        this.updateFrozenColumnsWidth();\n    }\n\n    /** @hidden */\n    updateFrozenColumnsWidth(): void {\n        let allPreviousWidths = 0,\n            allNextWidths = 0;\n        for (const [column, prevColumn] of this._visibleColumnLeftNeighbourMap.entries()) {\n            allPreviousWidths +=\n                this._columnsCellMap.get(prevColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n            this._visibleColumnLeftOffsetPxMap.set(column, allPreviousWidths);\n        }\n        for (const [column, nextColumn] of this._visibleColumnRightNeighbourMap.entries()) {\n            allNextWidths +=\n                this._columnsCellMap.get(nextColumn as string)?.[0]?.nativeElement.getBoundingClientRect().width ?? 0;\n            this._visibleColumnRightOffsetPxMap.set(column, allNextWidths);\n        }\n    }\n\n    /** @hidden */\n    updateFrozenColumnsWidthAfterResize(columnName: string, diffX: number): void {\n        let found = false;\n        for (const [column, width] of this._visibleColumnLeftOffsetPxMap.entries()) {\n            if (column === columnName) {\n                found = true;\n            } else if (found) {\n                this._visibleColumnLeftOffsetPxMap.set(column, width + diffX);\n            }\n        }\n    }\n\n    /** Retrieves custom column value or returns `unset` */\n    getColumnWidthStyle(columnName: string): string {\n        const calculatedWidth = this._fixedColumnsWidthMap.get(columnName);\n        return calculatedWidth || 'unset';\n    }\n\n    /** Previous column name */\n    getPreviousColumnName(columnName: string): string | undefined {\n        return this._visibleColumnLeftNeighbourMap.get(columnName);\n    }\n\n    /** Previous column name */\n    getNextColumnName(columnName: string): string | undefined {\n        return this._visibleColumnRightNeighbourMap.get(columnName);\n    }\n\n    /** Overall previous columns width. Used to calculate offset for the absolute positioned cells. */\n    getPrevColumnsWidth(columnName: string): number {\n        return this._visibleColumnLeftOffsetPxMap.get(columnName) ?? 0;\n    }\n\n    /** Overall next columns width. Used to calculate offset for the absolute positioned cells. */\n    getNextColumnsWidth(columnName: string): number {\n        return this._visibleColumnRightOffsetPxMap.get(columnName) ?? 0;\n    }\n\n    /** Register column's cell to get its dimensions in further. */\n    registerColumnCell(columnName: string, cellElRef: ElementRef): void {\n        const columnCells = this._columnsCellMap.get(columnName) || [];\n        this._columnsCellMap.set(columnName, [cellElRef, ...columnCells]);\n    }\n\n    /** Unregister column's cell. */\n    unregisterColumnCell(columnName: string, cellElRef: ElementRef): void {\n        const columnCells = this._columnsCellMap.get(columnName) || [];\n        const elmIndex = columnCells.findIndex((e) => e.nativeElement === cellElRef.nativeElement);\n\n        if (elmIndex === -1) {\n            return;\n        }\n\n        columnCells.splice(elmIndex, 1);\n\n        this._columnsCellMap.set(columnName, columnCells);\n    }\n\n    /** Register the value of column width that changed from  input */\n    setCustomWidth(columnName: string, value: string): void {\n        this._fixedColumnsWidthMap.set(columnName, value);\n        this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n    }\n\n    /** Set the appropriate column resizer position. */\n    setInitialResizerPosition(resizerPosition: number, resizedColumn: string): void {\n        if (this.resizeInProgress) {\n            return;\n        }\n\n        this._resizedColumn = resizedColumn;\n        this._resizerPosition = null;\n        this.resizerPosition$.next(this.resizerPosition);\n\n        if (resizerPosition != null) {\n            const scrollLeftOffset = this._scrollLeft * (this._isRtl() ? 1 : -1);\n            this._resizerPosition = resizerPosition - TABLE_RESIZER_BORDER_WIDTH + scrollLeftOffset;\n            this.resizerPosition$.next(this.resizerPosition);\n        }\n    }\n\n    /** Hide the column resizer. */\n    hideResizer(): void {\n        if (this._resizeInProgress) {\n            return;\n        }\n\n        this._resizerPosition = null;\n        this.resizerPosition$.next(this.resizerPosition);\n        this._markForCheck.next();\n    }\n\n    /** @hidden */\n    _setInitialTableWidth(): void {\n        this._initialTableWidth = this._tableRef._tableWidthPx;\n    }\n\n    /** Handle start resizing. */\n    startResize(event: MouseEvent): void {\n        this._startX = this.resizerPosition;\n        this._clientStartX = event.clientX;\n\n        this._updateResizerPositionOnMouseMove();\n\n        this._resizeInProgress = true;\n        this.resizeInProgress$.next(true);\n    }\n\n    /** Handle end resizing. */\n    finishResize(event: MouseEvent): void {\n        this._resizerMoveSubscription.unsubscribe();\n\n        this._resizeInProgress = false;\n        this.resizeInProgress$.next(false);\n        this._resizerPosition = null;\n        this.resizerPosition$.next(this.resizerPosition);\n\n        if (this._startX != null) {\n            const clientStartX = this._clientStartX ?? 0;\n            const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n            this._processResize(diffX);\n        }\n\n        this._startX = null;\n        this._clientStartX = null;\n\n        this._markForCheck.next();\n    }\n\n    /** Update columns width after resizing, prevent from having too small columns. */\n    _processResize(diffX: number): void {\n        const resizedElement = this._columnsCellMap.get(this._resizedColumn)?.[0]?.nativeElement;\n        const columnWidth = resizedElement?.getBoundingClientRect().width;\n\n        if (!columnWidth || !resizedElement) {\n            return;\n        }\n\n        if (diffX < 0 && columnWidth + diffX < this._tableRef.minimumColumnWidth) {\n            diffX = this._tableRef.minimumColumnWidth - columnWidth;\n        }\n\n        if (!this.fixedWidth) {\n            for (const [columnName, cells] of this._columnsCellMap.entries()) {\n                if (cells.length) {\n                    this._fixedColumnsWidthMap.set(\n                        columnName,\n                        cells[0].nativeElement.getBoundingClientRect().width + 'px'\n                    );\n                }\n            }\n            this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n        }\n\n        /**\n         * In case \"_resizedColumn\" is freezable, make sure the overall width of freezable columns does not exceed the width of the table.\n         * If it does, columns will be made unfrozen.\n         */\n        if (\n            diffX > 0 &&\n            (this._tableRef._freezableColumns.has(this._resizedColumn) ||\n                this._tableRef._freezableEndColumns?.has(this._resizedColumn))\n        ) {\n            let actualWidth = this.getPrevColumnsWidth(this._resizedColumn) + columnWidth;\n            if (this._tableRef._freezableEndColumns?.has(this._resizedColumn)) {\n                actualWidth = this.getNextColumnsWidth(this._resizedColumn) + columnWidth;\n            }\n            const newWidth = actualWidth + diffX;\n            const maxWidth = this._tableRef.getMaxAllowedFreezableColumnsWidth();\n            if (newWidth >= maxWidth) {\n                this._tableRef._freezableColumns.forEach((column) => {\n                    this._tableRef.unfreeze(column.toString());\n                });\n            }\n        }\n\n        const updatedWidth = columnWidth + diffX;\n        this._fixedColumnsWidthMap.set(this._resizedColumn, updatedWidth + 'px');\n        this.fixedColumsWidthChange.next(this._fixedColumnsWidthMap);\n        this.updateFrozenColumnsWidthAfterResize(this._resizedColumn, diffX);\n\n        const computedStyles = window.getComputedStyle(resizedElement);\n        const padding = parseInt(computedStyles.paddingLeft, 10) + parseInt(computedStyles.paddingRight, 10);\n        this._updateHeaderOverflowState(updatedWidth - padding);\n        this._markForCheck.next();\n    }\n\n    /** Update column resizer position. */\n    private _updateResizerPositionOnMouseMove(): void {\n        this._resizerMoveSubscription = fromEvent<MouseEvent>(document, 'mousemove')\n            .pipe(debounceTime(10))\n            .subscribe((event) => {\n                const clientStartX = this._clientStartX ?? 0;\n                const diffX = this._isRtl() ? clientStartX - event.clientX : event.clientX - clientStartX;\n\n                this._resizerPosition = (this._startX ?? 0) + diffX;\n                this.resizerPosition$.next(this.resizerPosition);\n            });\n    }\n\n    /**\n     * Check if the header text length goes over the column width. In such case applies text truncation with\n     * ellipsis and make sure we also show a tooltip.\n     *\n     * @private\n     */\n    private _updateHeaderOverflowState(updatedWidth: number): void {\n        const element = this._columnsCellMap\n            .get(this._resizedColumn)\n            ?.find((c) => c?.nativeElement.tagName === 'TH')?.nativeElement;\n        const visibleColumn = this._tableRef.getVisibleTableColumns().find((c) => c.name === this._resizedColumn);\n        const headerTextElem = element?.querySelector(`#${this._tableRef.id}-header-cell-${this._resizedColumn}`);\n\n        if (!headerTextElem || !visibleColumn) {\n            return;\n        }\n        visibleColumn.headerOverflows = headerTextElem.scrollWidth > updatedWidth;\n    }\n}\n","import { AfterViewInit, computed, Directive, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FDK_FOCUSABLE_ITEM_DIRECTIVE, FocusableItemDirective, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective } from '@fundamental-ngx/core/table';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\n\nexport type TableColumnResizableSide = 'start' | 'end' | 'both';\n\nexport const TABLE_CELL_RESIZABLE_THRESHOLD_PX = 4;\n\n/**\n * Tracks mouse movement over the cell if the mouse pointer near the side of the cell, informs resize service.\n */\n@Directive({\n    selector: '[fdpTableCellResizable]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDK_FOCUSABLE_ITEM_DIRECTIVE,\n            useExisting: PlatformTableCellResizableDirective\n        },\n        {\n            provide: FocusableItemDirective,\n            useExisting: PlatformTableCellResizableDirective\n        },\n        {\n            provide: TableCellDirective,\n            useExisting: PlatformTableCellResizableDirective\n        }\n    ]\n})\nexport class PlatformTableCellResizableDirective\n    extends TableCellDirective\n    implements OnInit, AfterViewInit, OnDestroy\n{\n    /** First column can be resized only by its end */\n    @Input('fdpTableCellResizable')\n    set resizableSide(value: TableColumnResizableSide) {\n        if (!value) {\n            return;\n        }\n\n        this._resizableSide = value;\n    }\n\n    /** Column name */\n    @Input()\n    columnName: string;\n\n    /** @hidden */\n    private _resizableSide: TableColumnResizableSide = 'both';\n\n    /** @hidden */\n    private readonly _isRtl = computed(() => !!this._rtlService?.rtl());\n\n    /** @hidden */\n    private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _zone = inject(NgZone);\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._zone.runOutsideAngular(() => {\n            fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousemove')\n                .pipe(\n                    filter(() => this._tableColumnResizeService?.resizeInProgress !== true),\n                    debounceTime(5),\n                    map((event) => this._getResizer(event) || { resizerPosition: 0, resizedColumn: this.columnName }),\n                    takeUntilDestroyed(this._destroyRef)\n                )\n                .subscribe((data) => {\n                    this._tableColumnResizeService.setInitialResizerPosition(data.resizerPosition, data.resizedColumn);\n                });\n            fromEvent<FocusEvent>(this.elementRef.nativeElement, 'focus')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe(() => {\n                    this._tableColumnResizeService.setInitialResizerPosition(0, this.columnName);\n                });\n        });\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        if (this.columnName == null) {\n            return;\n        }\n\n        this._tableColumnResizeService?.registerColumnCell(this.columnName, this.elementRef);\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._tableColumnResizeService?.unregisterColumnCell(this.columnName, this.elementRef);\n    }\n\n    /** @hidden */\n    private _getResizer(event: MouseEvent): { resizerPosition: number; resizedColumn: string } | null {\n        const el = this.elementRef.nativeElement;\n        const elPosition = el.getBoundingClientRect();\n        // check if mouse is within 5px of cell border\n        if (event.clientX > elPosition.x + elPosition.width - 5 || event.clientX < elPosition.x + 5) {\n            let resizerPosition: number | undefined;\n            let resizedColumn: string | undefined;\n\n            const pointerOnLeft = this._isRtl()\n                ? elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n                : event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n            if (pointerOnLeft && this._resizableSide !== 'end') {\n                resizerPosition = this._isRtl()\n                    ? el.parentElement!.offsetWidth - (el.offsetLeft + el.offsetWidth)\n                    : el.offsetLeft;\n\n                resizedColumn = this._tableColumnResizeService.getPreviousColumnName(this.columnName);\n            }\n\n            const pointerOnRight = this._isRtl()\n                ? event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX\n                : elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX;\n\n            if (pointerOnRight && this._resizableSide !== 'start') {\n                resizerPosition = this._isRtl()\n                    ? el.parentElement!.offsetWidth - el.offsetLeft\n                    : el.offsetLeft + el.offsetWidth;\n\n                resizedColumn = this.columnName;\n            }\n\n            if (!resizedColumn) {\n                return null;\n            }\n\n            return { resizerPosition: resizerPosition!, resizedColumn };\n        } else {\n            return null;\n        }\n    }\n}\n","import { NgForm } from '@angular/forms';\n\nexport abstract class EditableTableCell {\n    abstract form: NgForm;\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport interface FdpCellDefContext<T = any> {\n    $implicit: T;\n    popping: boolean;\n    rowIndex: number;\n}\n\n/** Column cell container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-cell', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableCell {}\n\n/**\n * Cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpCellDef<T = any> {\n    /** Property to support typings. */\n    @Input()\n    fdpCellDefAs: T;\n    /** @hidden */\n    constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n    /** @hidden */\n    static ngTemplateContextGuard<T>(dir: FdpCellDef<T>, ctx: FdpCellDefContext): ctx is FdpCellDefContext<T> {\n        return true;\n    }\n}\n\n@Directive({ selector: '[fdpEditableCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpEditableCellDef {\n    /** @hidden */\n    constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n    selector: '[fdpEditableCellForm]',\n    standalone: true,\n    providers: [{ provide: EditableTableCell, useExisting: FdpEditableCellFormDirective }]\n})\nexport class FdpEditableCellFormDirective implements EditableTableCell {\n    /** @hidden */\n    constructor(public form: NgForm) {}\n}\n","export enum FilterType {\n    INPUT = 'input',\n    SINGLE = 'single-select',\n    MULTI = 'multi-select',\n    CATEGORY = 'category',\n    CUSTOM = 'custom'\n}\n\nexport enum FilterableColumnDataType {\n    STRING = 'string',\n    NUMBER = 'number',\n    BOOLEAN = 'boolean',\n    DATE = 'date'\n}\n","import { FdLanguageKeyIdentifier } from '@fundamental-ngx/i18n';\nimport { FilterableColumnDataType } from './filter-type.enum';\n\n/** All possible strategies */\nexport const FILTER_STRATEGY = {\n    EQ: 'equalTo',\n    CONTAINS: 'contains',\n    BETWEEN: 'between',\n    BEGINS_WITH: 'beginsWith',\n    ENDS_WITH: 'endsWith',\n    GT: 'greaterThan',\n    GTE: 'greaterThanOrEqualTo',\n    LT: 'lessThan',\n    LTE: 'lessThanOrEqualTo',\n    AFTER: 'after',\n    ON_OR_AFTER: 'onOrAfter',\n    BEFORE: 'before',\n    BEFORE_OR_ON: 'beforeOrOn'\n} as const;\n\ntype FilterStrategyType = typeof FILTER_STRATEGY;\n\nexport type FilterStrategy = FilterStrategyType[keyof FilterStrategyType];\n\nexport const FILTER_STRATEGY_LABEL: Record<FilterStrategy, FdLanguageKeyIdentifier> = {\n    equalTo: 'platformTable.P13FilterStrategyLabelEqualTo',\n    contains: 'platformTable.P13FilterStrategyLabelContains',\n    between: 'platformTable.P13FilterStrategyLabelBetween',\n    beginsWith: 'platformTable.P13FilterStrategyLabelBeginsWith',\n    endsWith: 'platformTable.P13FilterStrategyLabelEndsWith',\n    greaterThan: 'platformTable.P13FilterStrategyLabelGreaterThan',\n    greaterThanOrEqualTo: 'platformTable.P13FilterStrategyLabelGreaterThanOrEqualTo',\n    lessThan: 'platformTable.P13FilterStrategyLabelLessThan',\n    lessThanOrEqualTo: 'platformTable.P13FilterStrategyLabelLessThanOrEqualTo',\n    after: 'platformTable.P13FilterStrategyLabelAfter',\n    onOrAfter: 'platformTable.P13FilterStrategyLabelOnOrAfter',\n    before: 'platformTable.P13FilterStrategyLabelBefore',\n    beforeOrOn: 'platformTable.P13FilterStrategyLabelBeforeOrOn'\n};\n\n/** Date Filter Strategies */\nexport const FILTER_DATE_STRATEGY: Pick<\n    FilterStrategyType,\n    'BETWEEN' | 'EQ' | 'AFTER' | 'ON_OR_AFTER' | 'BEFORE' | 'BEFORE_OR_ON'\n> = {\n    EQ: 'equalTo',\n    BETWEEN: 'between',\n    AFTER: 'after',\n    ON_OR_AFTER: 'onOrAfter',\n    BEFORE: 'before',\n    BEFORE_OR_ON: 'beforeOrOn'\n};\n\nexport type FilterDateStrategy = (typeof FILTER_DATE_STRATEGY)[keyof typeof FILTER_DATE_STRATEGY];\n\nexport const FILTER_DATE_STRATEGIES: ReadonlyArray<FilterDateStrategy> = Object.values(FILTER_DATE_STRATEGY);\n\n/** Number Filter Strategies */\nexport const FILTER_NUMBER_STRATEGY: Pick<FilterStrategyType, 'BETWEEN' | 'EQ' | 'GT' | 'GTE' | 'LT' | 'LTE'> = {\n    EQ: 'equalTo',\n    BETWEEN: 'between',\n    GT: 'greaterThan',\n    GTE: 'greaterThanOrEqualTo',\n    LT: 'lessThan',\n    LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterNumberStrategy = (typeof FILTER_NUMBER_STRATEGY)[keyof typeof FILTER_NUMBER_STRATEGY];\n\nexport const FILTER_NUMBER_STRATEGIES: ReadonlyArray<FilterNumberStrategy> = Object.values(FILTER_NUMBER_STRATEGY);\n\n/** String Filter Strategies */\nexport const FILTER_STRING_STRATEGY: Pick<\n    FilterStrategyType,\n    'BETWEEN' | 'CONTAINS' | 'EQ' | 'BEGINS_WITH' | 'ENDS_WITH' | 'GT' | 'GTE' | 'LT' | 'LTE'\n> = {\n    CONTAINS: 'contains',\n    EQ: 'equalTo',\n    BEGINS_WITH: 'beginsWith',\n    BETWEEN: 'between',\n    ENDS_WITH: 'endsWith',\n    GT: 'greaterThan',\n    GTE: 'greaterThanOrEqualTo',\n    LT: 'lessThan',\n    LTE: 'lessThanOrEqualTo'\n};\n\nexport type FilterAllStrategy = (typeof FILTER_STRATEGY)[keyof typeof FILTER_STRATEGY];\n\nexport type FilterStringStrategy = (typeof FILTER_STRING_STRATEGY)[keyof typeof FILTER_STRING_STRATEGY];\n\nexport const FILTER_STRING_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_STRING_STRATEGY);\n\n/** Boolean Filter Strategies */\nexport const FILTER_BOOLEAN_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n    EQ: 'equalTo'\n};\n\nexport type FilterBooleanStrategy = (typeof FILTER_BOOLEAN_STRATEGY)[keyof typeof FILTER_BOOLEAN_STRATEGY];\n\nexport const FILTER_BOOLEAN_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_BOOLEAN_STRATEGY);\n\n/** Default Filter Strategies for undefined data type */\nexport const FILTER_DEFAULT_STRATEGY: Pick<FilterStrategyType, 'EQ'> = {\n    EQ: 'equalTo'\n};\n\nexport type FilterDefaultStrategy = (typeof FILTER_DEFAULT_STRATEGY)[keyof typeof FILTER_DEFAULT_STRATEGY];\n\nexport const FILTER_DEFAULT_STRATEGIES: ReadonlyArray<FilterStringStrategy> = Object.values(FILTER_DEFAULT_STRATEGY);\n\n// Get Possible strategies based on data type\nexport const getFilterStrategiesBasedOnDataType = (\n    dataType: FilterableColumnDataType\n): readonly FilterStringStrategy[] | readonly FilterDateStrategy[] => {\n    switch (dataType) {\n        case FilterableColumnDataType.STRING:\n            return FILTER_STRING_STRATEGIES;\n        case FilterableColumnDataType.NUMBER:\n            return FILTER_NUMBER_STRATEGIES;\n        case FilterableColumnDataType.DATE:\n            return FILTER_DATE_STRATEGIES;\n        case FilterableColumnDataType.BOOLEAN:\n            return FILTER_BOOLEAN_STRATEGIES;\n\n        default:\n            return FILTER_DEFAULT_STRATEGIES;\n    }\n};\n","export enum ColumnAlign {\n    START = 'start',\n    CENTER = 'center',\n    END = 'end'\n}\n\nexport type ColumnAlignValue = 'start' | 'center' | 'end';\n","export enum TableRowType {\n    ITEM = 'item',\n    GROUP = 'group',\n    TREE = 'tree'\n}\n","export enum SelectionMode {\n    SINGLE = 'single',\n    MULTIPLE = 'multiple',\n    NONE = 'none'\n}\n\nexport type SelectionModeValue = 'single' | 'multiple' | 'none';\n","export enum SortDirection {\n    NONE = 'none',\n    ASC = 'asc',\n    DESC = 'desc'\n}\n","import { get } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FILTER_DATE_STRATEGY, FILTER_NUMBER_STRATEGY, FILTER_STRING_STRATEGY } from './enums';\nimport {\n    CollectionBooleanFilter,\n    CollectionDateFilter,\n    CollectionFilter,\n    CollectionNumberFilter,\n    CollectionStringFilter\n} from './interfaces';\nimport { TableRow } from './models/table-row.model';\n\nexport const filterByString = (rows: TableRow[], filter: CollectionStringFilter): TableRow[] => {\n    const filterValue = filter.value && filter.value.toLocaleLowerCase();\n    const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n\n    switch (filter.strategy) {\n        case FILTER_STRING_STRATEGY.EQ:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() === filterValue);\n        case FILTER_STRING_STRATEGY.GT:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() > filterValue);\n        case FILTER_STRING_STRATEGY.GTE:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() >= filterValue);\n        case FILTER_STRING_STRATEGY.LT:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() < filterValue);\n        case FILTER_STRING_STRATEGY.LTE:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase() <= filterValue);\n        case FILTER_STRING_STRATEGY.BETWEEN:\n            return rows.filter((r) => {\n                const rowValue = get(r.value, filter.field).toLocaleLowerCase();\n                return rowValue >= filterValue && rowValue <= filterValue2;\n            });\n        case FILTER_STRING_STRATEGY.BEGINS_WITH:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().startsWith(filterValue));\n        case FILTER_STRING_STRATEGY.ENDS_WITH:\n            return rows.filter((r) => get(r.value, filter.field).toLocaleLowerCase().endsWith(filterValue));\n        case FILTER_STRING_STRATEGY.CONTAINS:\n        default:\n            return rows.filter((r) => {\n                let rowValue = get(r.value, filter.field);\n                if (typeof rowValue === 'number') {\n                    rowValue = rowValue.toString();\n                }\n\n                return rowValue.toLocaleLowerCase().includes(filterValue);\n            });\n    }\n};\n\nexport const filterByNumber = (rows: TableRow[], filter: CollectionNumberFilter): TableRow[] => {\n    const filterValue = filter.value;\n    const filterValue2 = filter.value2 || 0;\n\n    switch (filter.strategy) {\n        case FILTER_NUMBER_STRATEGY.EQ:\n            return rows.filter((r) => get(r.value, filter.field) === filterValue);\n        case FILTER_NUMBER_STRATEGY.GT:\n            return rows.filter((r) => get(r.value, filter.field) > filterValue);\n        case FILTER_NUMBER_STRATEGY.GTE:\n            return rows.filter((r) => get(r.value, filter.field) >= filterValue);\n        case FILTER_NUMBER_STRATEGY.LT:\n            return rows.filter((r) => get(r.value, filter.field) < filterValue);\n        case FILTER_NUMBER_STRATEGY.LTE:\n            return rows.filter((r) => get(r.value, filter.field) <= filterValue);\n        case FILTER_NUMBER_STRATEGY.BETWEEN:\n            return rows.filter((r) => {\n                const rowValue = get(r.value, filter.field);\n                return rowValue >= filterValue && rowValue <= filterValue2;\n            });\n        default:\n            return rows.filter((r) => get(r.value, filter.field).toString().includes(filterValue));\n    }\n};\n\nexport const filterByDate = <D = any>(\n    rows: TableRow[],\n    filter: CollectionDateFilter,\n    adapter: DatetimeAdapter<D>\n): TableRow[] => {\n    const filterValue = filter.value;\n    const filterValue2 = filter.value2;\n\n    switch (filter.strategy) {\n        case FILTER_DATE_STRATEGY.AFTER:\n            return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) > 0);\n        case FILTER_DATE_STRATEGY.ON_OR_AFTER:\n            return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) >= 0);\n        case FILTER_DATE_STRATEGY.BEFORE:\n            return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) < 0);\n        case FILTER_DATE_STRATEGY.BEFORE_OR_ON:\n            return rows.filter((r) => adapter.compareDate(get(r.value, filter.field), filterValue) <= 0);\n        case FILTER_DATE_STRATEGY.BETWEEN:\n            return rows.filter((r) => adapter.isBetween(get(r.value, filter.field), filterValue, filterValue2));\n        case FILTER_DATE_STRATEGY.EQ:\n        default:\n            return rows.filter((r) => adapter.dateTimesEqual(get(r.value, filter.field), filterValue));\n    }\n};\n\nexport const filterByBoolean = (rows: TableRow[], filter: CollectionBooleanFilter): TableRow[] =>\n    rows.filter((r) => get(r.value, filter.field) === filter.value);\n\nexport const getUniqueListValuesByKey = <T, K extends keyof T>(list: T[], key: K): T[] =>\n    Array.from(\n        list\n            .reduce((map, item) => {\n                map.delete(item[key]);\n                map.set(item[key], item);\n                return map;\n            }, new Map<T[K], T>())\n            .values()\n    );\n\nexport const getScrollBarWidth = (document: Document): number => {\n    const div = document.createElement('div');\n    div.textContent = 'W';\n    div.style.position = 'absolute';\n    div.style.visibility = 'hidden';\n    div.style.overflowY = 'scroll';\n    document.body.appendChild(div);\n    const scrollbarWidth = div.offsetWidth - div.clientWidth;\n    document.body.removeChild(div);\n    return scrollbarWidth;\n};\n\n/** @hidden */\nexport function isCollectionFilter(item: any): item is CollectionFilter {\n    return item.type !== undefined && item.strategy !== undefined && item.value !== undefined;\n}\n","import { DatetimeAdapter, FdDate } from '@fundamental-ngx/core/datetime';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { SelectItem, isSelectItem } from '@fundamental-ngx/platform/shared';\nimport { Observable, Subject } from 'rxjs';\nimport { map, take, takeUntil } from 'rxjs/operators';\nimport {\n    CollectionBooleanFilter,\n    CollectionDateFilter,\n    CollectionFilter,\n    CollectionFilterAndGroup,\n    CollectionFilterGroup,\n    CollectionNumberFilter,\n    CollectionSelectFilter,\n    CollectionStringFilter\n} from '../interfaces/collection-filter.interface';\n\nimport { get } from '@fundamental-ngx/cdk/utils';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { isCollectionFilter } from '../utils';\n\nexport abstract class BaseTableDataProvider<T, P = T[]> {\n    abstract fetch(state?: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n\n    abstract fetchData(state: TableState, parentRows?: TableRow<T>[]): Observable<P>;\n    /** Total items count. */\n    totalItems: number;\n    /** Array of items. */\n    items: P;\n\n    /** Date time adapter for date field filtering. */\n    dateTimeAdapter?: DatetimeAdapter<any>;\n    /** Additional set of filters provided by outside component. */\n    protected filterBy: CollectionFilterAndGroup[];\n\n    /** Additional search query provided by outside component. */\n    protected searchInput?: SearchInput;\n\n    /** @hidden */\n    protected _destroy$ = new Subject<void>();\n\n    /**\n     * Method for setting external filtering conditions.\n     * @param filterBy Set of column filters.\n     * @param searchInput Search condition from search field.\n     */\n    setFilters(filterBy: CollectionFilterAndGroup[], searchInput?: SearchInput): void {\n        this.filterBy = filterBy;\n        this.searchInput = searchInput;\n    }\n\n    /**\n     * Method for filtering the data.\n     * @param items Array of data source items.\n     * @param filters Set of column filters.\n     * @returns Array of filtered items.\n     */\n    applyFiltering(items: T[], filters: CollectionFilterAndGroup[]): T[] {\n        items = items.filter((i) => this.getFilteringStrategy(i, filters));\n        return items;\n    }\n\n    /** @hidden */\n    getSelectItemValue(item: any): any {\n        return isSelectItem(item) ? item.value : item;\n    }\n\n    /**\n     * Method which selects appropriate filtering strategy of the field depending on the filter type.\n     * Developers can override this method to extend the filtering functionality.\n     * @param item item of the data source.\n     * @param filters Set of column filters.\n     * @returns Whether or not item should be included in data array.\n     */\n    getFilteringStrategy(item: T, filters: CollectionFilterAndGroup[]): boolean {\n        return filters\n            .filter((condition) => condition.field)\n            .every((filter) => {\n                if (isCollectionFilter(filter)) {\n                    return this.collectionFilterStrategy(item, filter);\n                }\n\n                return this.collectionFilterGroupStrategy(item, filter);\n            });\n    }\n\n    /**\n     * Method which filters item depending on applied condition result.\n     * Developers can override this method to extend its functionality\n     * @param item Item to apply conditions to.\n     * @param filter Column filter.\n     * @returns {boolean} Whether this item should be present in filtered array of items.\n     */\n    collectionFilterStrategy(item: T, filter: CollectionFilter): boolean {\n        let result: boolean;\n\n        switch (filter.type) {\n            case 'boolean':\n                result = this.filterBoolean(item, filter as CollectionBooleanFilter);\n                break;\n            case 'number':\n                result = this.filterNumber(item, filter as CollectionNumberFilter);\n                break;\n            case 'date': {\n                result = this.filterDate(item, filter as CollectionDateFilter, this.dateTimeAdapter);\n                break;\n            }\n            case 'string':\n            default:\n                result = Array.isArray(filter.value)\n                    ? this.filterArray(item, filter as CollectionSelectFilter)\n                    : this.filterString(item, filter as CollectionStringFilter);\n                break;\n        }\n\n        return result;\n    }\n\n    /**\n     * Method which applies group filtering conditions for the item.\n     * @param item Item to apply conditions to.\n     * @param filter Filter group.\n     * @returns {boolean} Whether this item should be present in filtered items array.\n     */\n    collectionFilterGroupStrategy(item: T, filter: CollectionFilterGroup): boolean {\n        return filter.strategy === 'and'\n            ? filter.filters.every((f) => this.collectionFilterStrategy(item, f))\n            : filter.filters.some((f) => this.collectionFilterStrategy(item, f));\n    }\n\n    /**\n     * Applies search of the search term for visible table columns.\n     * Developers can override this method to extend the filtering functionality.\n     * @param items data source items array.\n     * @param tableState @see TableState Set of table parameters.\n     * @returns filtered data source items array.\n     */\n    search(items: T[], { searchInput, columnKeys }: TableState): T[] {\n        const searchText = searchInput?.text || '';\n        const keysToSearchBy = columnKeys;\n\n        if (searchText.trim() === '' || keysToSearchBy.length === 0) {\n            return items;\n        }\n\n        items = items.filter((item) => {\n            const valuesForSearch = keysToSearchBy.map((key) => get(item, key));\n\n            return valuesForSearch\n                .filter((value) => !!value)\n                .map((value): string => value.toString())\n                .some((value) => value.toLocaleLowerCase().includes(searchText.toLocaleLowerCase()));\n        });\n\n        return items;\n    }\n\n    /**\n     * String filtering strategy\n     * @param item data source array item.\n     * @param filter filter object\n     * @returns whether or not item should be included in data source array.\n     */\n    protected filterString(item: T, filter: CollectionStringFilter): boolean {\n        const filterValue = filter.value && filter.value.toLocaleLowerCase();\n        const filterValue2 = (filter.value2 && filter.value2.toLocaleLowerCase()) || '';\n        let itemValue = get(item, filter.field);\n\n        itemValue = itemValue ? itemValue.toLocaleLowerCase() : itemValue;\n\n        let result: boolean;\n\n        switch (filter.strategy) {\n            case 'equalTo':\n                result = itemValue === filterValue;\n                break;\n            case 'greaterThan':\n                result = itemValue > filterValue;\n                break;\n            case 'greaterThanOrEqualTo':\n                result = itemValue >= filterValue;\n                break;\n            case 'lessThan':\n                result = itemValue < filterValue;\n                break;\n            case 'lessThanOrEqualTo':\n                result = itemValue <= filterValue;\n                break;\n            case 'between':\n                result = itemValue >= filterValue && itemValue <= filterValue2;\n                break;\n            case 'beginsWith':\n                result = itemValue.startsWith(filterValue);\n                break;\n            case 'endsWith':\n                result = itemValue.endsWith(filterValue);\n                break;\n            case 'contains':\n            default:\n                result = itemValue ? itemValue.includes(filterValue) : itemValue === filterValue;\n        }\n\n        return filter.exclude ? !result : result;\n    }\n\n    /**\n     * Number filtering strategy\n     * @param item data source array item.\n     * @param filter filter object\n     * @returns whether or not item should be included in data source array.\n     */\n    protected filterNumber(item: T, filter: CollectionNumberFilter): boolean {\n        const filterValue = Number.parseFloat(filter.value as unknown as string);\n        const filterValue2 = Number.parseFloat(filter.value2 as unknown as string) || 0;\n        const itemValue = Number.parseFloat(get(item, filter.field));\n        let result: boolean;\n\n        switch (filter.strategy) {\n            case 'greaterThan':\n                result = itemValue > filterValue;\n                break;\n            case 'greaterThanOrEqualTo':\n                result = itemValue >= filterValue;\n                break;\n            case 'lessThan':\n                result = itemValue < filterValue;\n                break;\n            case 'lessThanOrEqualTo':\n                result = itemValue <= filterValue;\n                break;\n            case 'between':\n                result = itemValue >= filterValue && itemValue <= filterValue2;\n                break;\n            case 'equalTo':\n            default:\n                result = itemValue === filterValue;\n        }\n\n        return filter.exclude ? !result : result;\n    }\n\n    /**\n     * Date filtering strategy\n     * @param item data source array item.\n     * @param filter filter object\n     * @param adapter\n     * @returns whether or not item should be included in data source array.\n     */\n    protected filterDate<D = FdDate>(item: T, filter: CollectionDateFilter, adapter?: DatetimeAdapter<D>): boolean {\n        if (!adapter) {\n            throw new Error(\n                'In order to filter date columns, please provide DateTime adapter in your TableDataProvider constructor.'\n            );\n        }\n\n        const filterValue = filter.value;\n        const filterValue2 = filter.value2;\n        const itemValue = get(item, filter.field);\n        const diff = adapter.compareDate(itemValue, filterValue);\n        let result: boolean;\n\n        switch (filter.strategy) {\n            case 'after':\n                result = diff > 0;\n                break;\n            case 'onOrAfter':\n                result = diff >= 0;\n                break;\n            case 'before':\n                result = diff < 0;\n                break;\n            case 'beforeOrOn':\n                result = diff <= 0;\n                break;\n            case 'between':\n                result = adapter.isBetween(itemValue, filterValue, filterValue2);\n                break;\n\n            case 'equalTo':\n            default:\n                result = adapter.dateTimesEqual(itemValue, filterValue);\n        }\n\n        return filter.exclude ? !result : result;\n    }\n\n    /**\n     * Boolean filtering strategy\n     * @param item data source array item.\n     * @param filter filter object\n     * @returns whether or not item should be included in data source array.\n     */\n    protected filterBoolean(item: T, filter: CollectionBooleanFilter): boolean {\n        const filterValue = filter.value;\n        const itemValue = get(item, filter.field);\n        let result: boolean;\n\n        switch (filter.strategy) {\n            case 'equalTo':\n            default:\n                result = itemValue === filterValue;\n        }\n\n        return filter.exclude ? !result : result;\n    }\n\n    /**\n     * Array filtering strategy\n     * @param item data source array item.\n     * @param filter filter object\n     * @returns whether or not item should be included in data source array.\n     */\n    protected filterArray(item: T, filter: CollectionSelectFilter): boolean {\n        const filterValues = filter.value.map((v) => this.getSelectItemValue(v));\n        const itemValue = get(item, filter.field);\n        let result: boolean;\n\n        switch (filter.strategy) {\n            case 'equalTo':\n            default:\n                result = filterValues.includes(itemValue);\n        }\n\n        return !filterValues.length || filter.exclude ? !result : result;\n    }\n\n    /** @hidden */\n    protected unsubscribe(): void {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n}\n\nexport class TableDataProvider<T> extends BaseTableDataProvider<T> {\n    /**\n     * Method for retrieving the data.\n     * @param tableState @see TableState Set of table parameters.\n     * @returns Observable with data.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fetch(tableState?: TableState): Observable<T[]> {\n        throw new Error('fetch method should be implemented by developers for custom data providers.');\n    }\n\n    /**\n     * Method for applying filtering and retrieving the data.\n     * @param state @see TableState Set of table parameters.\n     * @returns Observable with filtered data.\n     */\n    fetchData(state: TableState): Observable<T[]> {\n        return this.fetch(state).pipe(\n            map((items) => {\n                if (this.searchInput) {\n                    items = this.search(items, { ...state, ...{ searchInput: this.searchInput } });\n                }\n\n                if (this.filterBy) {\n                    items = this.applyFiltering(items, this.filterBy);\n                }\n\n                return items;\n            }),\n            takeUntil(this._destroy$)\n        );\n    }\n\n    /**\n     * Method for getting all possible options for particular field.\n     * Used for creating select options.\n     * Developers can override this method to extend the filtering functionality.\n     * @param field key of the data item.\n     * @returns Observable with select items.\n     */\n    getFieldOptions(field: string): Observable<SelectItem[]> {\n        return this.fetch().pipe(\n            take(1),\n            map((data) => {\n                const options: SelectItem[] = data.map((item) => ({\n                    label: get(item, field),\n                    value: get(item, field)\n                }));\n\n                return options;\n            })\n        );\n    }\n}\n\nexport abstract class TableChildrenDataProvider<T> extends BaseTableDataProvider<T, Map<TableRow<T>, T[]>> {\n    /**\n     * Method for retrieving the amount of child itemf or a defined row.\n     * @param row\n     * @param state\n     */\n    abstract rowChildrenCount(row: TableRow<T>, state: TableState): Observable<number>;\n    /**\n     * Method for retrieving the data.\n     * @param tableState @see TableState Set of table parameters.\n     * @param parentRows\n     * @returns Observable with data.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fetch(tableState?: TableState, parentRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n        throw new Error('fetch method should be implemented by developers for custom data providers.');\n    }\n\n    /**\n     * Method for applying filtering and retrieving the data.\n     * @param state @see TableState Set of table parameters.\n     * @param tableRows\n     * @returns Observable with filtered data.\n     */\n    fetchData(state: TableState, tableRows?: TableRow<T>[]): Observable<Map<TableRow<T>, T[]>> {\n        return this.fetch(state, tableRows).pipe(\n            map((items) => {\n                items.forEach((rowItems, row) => {\n                    if (this.searchInput) {\n                        rowItems = this.search(rowItems, { ...state, ...{ searchInput: this.searchInput } });\n                    }\n\n                    if (this.filterBy) {\n                        rowItems = this.applyFiltering(rowItems, this.filterBy);\n                    }\n\n                    if (rowItems.length === 0) {\n                        items.delete(row);\n                    } else {\n                        items.set(row, rowItems);\n                    }\n                });\n                return items;\n            }),\n            takeUntil(this._destroy$)\n        );\n    }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { DataSource } from '@fundamental-ngx/platform/shared';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableRow } from '../models';\nimport { TableChildrenDataProvider, TableDataProvider } from './table-data-provider';\n\nexport abstract class BaseTableDataSource<T, P = T[], L = boolean> implements DataSource<T, P, L> {\n    /**\n     * Method for retrieving the data of the provided data source.\n     * @param tableState @see TableState Set of table parameters.\n     * @param parentRows\n     */\n    abstract fetch(tableState: TableState, parentRows?: TableRow<T>[]): void;\n    /** @hidden */\n    protected readonly _dataChanges$ = new BehaviorSubject<P>([] as any);\n    /** @hidden */\n    protected readonly _onDataRequested$ = new Subject<boolean>();\n\n    /** @hidden */\n    protected readonly _onDataReceived$ = new Subject<boolean>();\n\n    /** @hidden */\n    protected _dataLoading: L;\n\n    /** @hidden */\n    protected readonly _dataLoading$: BehaviorSubject<L>;\n\n    /** @hidden */\n    protected readonly _destroy$ = new Subject<void>();\n\n    /** @hidden */\n    protected constructor() {\n        this._dataLoading$ = new BehaviorSubject(this._dataLoading);\n    }\n\n    /**\n     * Emitted when new data has been requested.\n     * @returns Observable\n     */\n    get dataRequested(): Observable<boolean> {\n        return this._onDataRequested$.asObservable();\n    }\n\n    /**\n     * Emitted when new data has been received.\n     * @returns Observable\n     */\n    get dataReceived(): Observable<boolean> {\n        return this._onDataReceived$.asObservable();\n    }\n\n    /**\n     * Emitted when loading state has been changed.\n     * @returns Observable.\n     */\n    get dataLoading(): Observable<L> {\n        return this._dataLoading$.asObservable();\n    }\n\n    /**\n     * Emits when the data from the provider has been changed.\n     * @returns Observable of data source objects.\n     */\n    get dataChanges(): Observable<P> {\n        return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));\n    }\n\n    /** @hidden */\n    get isDataLoading(): L {\n        return this._dataLoading;\n    }\n\n    /** @hidden */\n    get data(): P {\n        return this._dataChanges$.value;\n    }\n\n    /** @hidden */\n    open(): Observable<P> {\n        return this._dataChanges$.asObservable();\n    }\n\n    /** @hidden */\n    onDataRequested(): Observable<void> {\n        return this._onDataRequested$.asObservable().pipe(map(() => void 0));\n    }\n\n    /** @hidden */\n    onDataReceived(): Observable<void> {\n        return this._onDataReceived$.asObservable().pipe(map(() => void 0));\n    }\n\n    /** @hidden */\n    close(): void {}\n\n    /**\n     * Closes the stream\n     */\n    unsubscribe(): void {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n}\n\nexport class TableDataSource<T> extends BaseTableDataSource<T> {\n    /**\n     * @hidden\n     */\n    constructor(readonly dataProvider: TableDataProvider<T>) {\n        super();\n    }\n\n    /**\n     * Method for retrieving the data of the provided data source.\n     * @param tableState @see TableState Set of table parameters.\n     */\n    fetch(tableState: TableState): void {\n        this._onDataRequested$.next(true);\n        this._dataLoading$.next(true);\n        this._dataLoading = true;\n\n        this.dataProvider.fetchData(tableState).subscribe({\n            next: (items) => {\n                this._onDataReceived$.next(true);\n                this._dataLoading = false;\n                this._dataLoading$.next(false);\n                this._dataChanges$.next(items);\n            },\n            error: (error) => {\n                this._onDataReceived$.next(false);\n                this._dataLoading = false;\n                this._dataChanges$.error(error);\n            }\n        });\n    }\n}\n\nexport class ChildTableDataSource<T> extends BaseTableDataSource<\n    T,\n    Map<TableRow<T>, T[]>,\n    { row?: TableRow<T>; loading: boolean }[]\n> {\n    /**\n     * @hidden\n     */\n    constructor(readonly dataProvider: TableChildrenDataProvider<T>) {\n        super();\n    }\n\n    /**\n     * Method responsible for retrieving the items from the data provider.\n     * Additionaly, it sets the loading state along with the dataLoading and dataChanges streams.\n     * @param tableState\n     * @param parentRows\n     */\n    fetch(tableState: TableState, parentRows?: TableRow<T>[]): void {\n        this._onDataRequested$.next(true);\n        const loadingState = parentRows?.map((row) => ({ row, loading: true })) || [];\n        const finishedLoadingState = loadingState.map(({ row }) => ({ row, loading: false }));\n        this._dataLoading$.next(loadingState);\n        this._dataLoading = loadingState;\n\n        this.dataProvider.fetchData(tableState, parentRows).subscribe({\n            next: (items) => {\n                this._onDataReceived$.next(true);\n                this._dataLoading = finishedLoadingState;\n                this._dataLoading$.next(finishedLoadingState);\n                this._dataChanges$.next(items);\n            },\n            error: (error) => {\n                this._onDataReceived$.next(false);\n                this._dataLoading = finishedLoadingState;\n                this._dataLoading$.next(finishedLoadingState);\n                this._dataChanges$.error(error);\n            }\n        });\n    }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an array.\n *\n * Used to convert array source to the TableDataProvider interface.\n *\n */\nexport class ArrayTableDataProvider<T> extends TableDataProvider<T> {\n    /** @hidden */\n    protected items$ = new BehaviorSubject<T[]>([]);\n\n    /** @hidden */\n    constructor(items: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n        super();\n        this.items = items;\n        this.totalItems = this.items.length;\n        this.items$.next(this.items);\n        this.dateTimeAdapter = dateTimeAdapter;\n    }\n\n    /**\n     * Method for retrieving the data.\n     * @param tableState @see TableState Set of table parameters.\n     * @returns Observable with data.\n     */\n    fetch(state?: TableState): Observable<T[]> {\n        return this.items$.asObservable().pipe(\n            map((items) => {\n                if (state?.searchInput) {\n                    items = this.search(items, state);\n                }\n\n                if (state?.filterBy) {\n                    items = this.applyFiltering(items, state.filterBy);\n                }\n\n                this.totalItems = items.length;\n\n                return items;\n            })\n        );\n    }\n}\n\nexport class ArrayTableDataSource<T> extends TableDataSource<T> {\n    /** @hidden */\n    constructor(data: T[], dateTimeAdapter?: DatetimeAdapter<any>) {\n        super(new ArrayTableDataProvider(data, dateTimeAdapter));\n    }\n}\n","import { Observable } from 'rxjs';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { map } from 'rxjs/operators';\nimport { TableState } from '../interfaces/table-state.interface';\nimport { TableDataProvider } from './table-data-provider';\nimport { TableDataSource } from './table-data-source';\n\n/**\n * Table Data Provider based on an Observable.\n *\n * Used to convert observable source to the TableDataProvider interface.\n *\n */\nexport class ObservableTableDataProvider<T> extends TableDataProvider<T> {\n    /** @hidden */\n    protected items$: Observable<T[]>;\n\n    /** @hidden */\n    constructor(items$: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n        super();\n        this.items$ = items$;\n        this.dateTimeAdapter = dateTimeAdapter;\n    }\n\n    /**\n     * Method for retrieving the data.\n     * @param tableState @see TableState Set of table parameters.\n     * @returns Observable with data.\n     */\n    fetch(state?: TableState): Observable<T[]> {\n        return this.items$.pipe(\n            map((items) => {\n                this.items = items;\n                if (state?.searchInput) {\n                    items = this.search(items, state);\n                }\n\n                if (state?.filterBy) {\n                    items = this.applyFiltering(items, state.filterBy);\n                }\n\n                this.totalItems = items.length;\n\n                return items;\n            })\n        );\n    }\n}\n\nexport class ObservableTableDataSource<T> extends TableDataSource<T> {\n    /** @hidden */\n    constructor(data: Observable<T[]>, dateTimeAdapter?: DatetimeAdapter<any>) {\n        super(new ObservableTableDataProvider(data, dateTimeAdapter));\n    }\n}\n","import { DataSource, DataSourceParser, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './array-data-source';\nimport { ObservableTableDataSource } from './observable-data-source';\nimport { TableDataSource } from './table-data-source';\n\nexport class TableDataSourceParser<T> implements DataSourceParser<T, TableDataSource<T>> {\n    /** @hidden */\n    parse(source: DataSource<T>): TableDataSource<T> | undefined {\n        if (isDataSource(source)) {\n            return source as TableDataSource<T>;\n        }\n\n        if (Array.isArray(source)) {\n            return new ArrayTableDataSource(source);\n        }\n\n        if (isObservable(source)) {\n            return new ObservableTableDataSource(source);\n        }\n\n        return undefined;\n    }\n}\n","import { Directive, EventEmitter, inject, Input, OnDestroy, Output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { filter, startWith } from 'rxjs/operators';\nimport { FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { ChildTableDataSource, TableDataSource, TableDataSourceParser } from '../domain';\nimport { TableInitialState, TableRow } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n    selector: '[fdpTableDataSource]',\n    standalone: true,\n    providers: [\n        {\n            provide: FD_DATA_SOURCE_TRANSFORMER,\n            useClass: TableDataSourceParser\n        }\n    ]\n})\nexport class TableDataSourceDirective<T> extends DataSourceDirective<T, TableDataSource<T>> implements OnDestroy {\n    /**\n     * Data source.\n     * @param source\n     */\n    @Input()\n    set childDataSource(source: ChildTableDataSource<T> | null) {\n        this._childDataSource = source;\n        this._initializeChildDataSource();\n        this.childDataSourceChanged.next();\n    }\n\n    get childDataSource(): ChildTableDataSource<T> | null {\n        return this._childDataSource;\n    }\n\n    /** Event emitted when child data source instance being changed. */\n    @Output()\n    childDataSourceChanged = new EventEmitter<void>();\n\n    /** Event emitted when data loading is started. */\n    @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onDataRequested = new EventEmitter<void>();\n\n    /** Event emitted when data loading is finished. */\n    @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onDataReceived = new EventEmitter<void>();\n\n    /** Total items count stream. */\n    totalItems$ = signal<number>(0);\n\n    /** Items stream. */\n    items$ = new BehaviorSubject<T[]>([]);\n\n    /** Child items stream. */\n    childItems$ = new Subject<Map<TableRow<T>, T[]>>();\n\n    /** @hidden */\n    _tableDataSource: TableDataSource<T>;\n\n    /** @hidden */\n    _firstLoadingDone = false;\n\n    /** @hidden */\n    _internalLoadingState = false;\n\n    /** @hidden */\n    _internalChildrenLoadingState = false;\n\n    /** @hidden */\n    private _childDataSource: ChildTableDataSource<T> | null;\n\n    /** @hidden */\n    private _childDsSubscription = new Subscription();\n\n    /** @hidden */\n    set totalItems(value: number) {\n        this.totalItems$.set(value);\n    }\n\n    get totalItems(): number {\n        return this.totalItems$();\n    }\n\n    /** @hidden for data source handling */\n    private _tableDsSubscription: Subscription | null;\n\n    /** @hidden */\n    private _table: Table;\n\n    /** @hidden */\n    private readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _tableService = inject(TableService);\n\n    /** @hidden */\n    initializeDataSource(): void {\n        this.dataSourceChanged.pipe(startWith(true), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._closeDataSource();\n            this._listenToDataSource();\n        });\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n        this._tableDsSubscription?.unsubscribe();\n    }\n\n    /** @hidden */\n    setTable(table: Table): void {\n        this._table = table;\n    }\n\n    /**\n     * @hidden\n     * Initializes the child data source to fetch child rows.\n     */\n    private _initializeChildDataSource(): void {\n        if (isDataSource(this.childDataSource)) {\n            this.childDataSource?.unsubscribe();\n\n            this._childDsSubscription?.unsubscribe();\n        }\n        if (!this.childDataSource) {\n            return;\n        }\n\n        this._childDsSubscription = new Subscription();\n\n        this._childDsSubscription.add(\n            this.childDataSource.onDataRequested().subscribe(() => {\n                this._internalChildrenLoadingState = true;\n                this._tableService.setTableLoading(this._table.loadingState);\n            })\n        );\n\n        this._childDsSubscription.add(\n            this.childDataSource.onDataReceived().subscribe(() => {\n                this._internalChildrenLoadingState = false;\n                this._tableService.setTableLoading(this._table.loadingState);\n            })\n        );\n\n        this._childDsSubscription.add(\n            this.childDataSource.dataLoading\n                .pipe(\n                    filter((state) => !!state),\n                    takeUntilDestroyed(this._destroyRef)\n                )\n                .subscribe((loadingStates) => {\n                    loadingStates.forEach((state) => state.row?.childItemsLoading$.next(state.loading));\n                })\n        );\n\n        this._childDsSubscription.add(\n            this.childDataSource.dataChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n                this.childItems$.next(data);\n            })\n        );\n    }\n\n    /**\n     * @hidden\n     * This is a single point of data entry to the component. We don't want to set data on different\n     * places. If any new data comes in, or you do a search, and you want to pass initial data\n     * its here.\n     */\n    private _listenToDataSource(): void {\n        this._tableDsSubscription?.unsubscribe();\n        this._tableDsSubscription = new Subscription();\n\n        const dataSourceStream = this.dataSourceProvider;\n        if (dataSourceStream === undefined) {\n            throw new Error(`[TableDataSource] source did not match an Array, Observable, nor DataSource`);\n        }\n\n        this._tableDsSubscription.add(\n            this.dataChanged$.subscribe((items) => {\n                this.totalItems$.set(dataSourceStream.dataProvider.totalItems);\n                this.items$.next(items);\n            })\n        );\n\n        this._tableDsSubscription.add(\n            dataSourceStream.onDataRequested().subscribe(() => {\n                this.onDataRequested.emit();\n                this._internalLoadingState = true;\n                this._tableService.setTableLoading(this._table.loadingState);\n            })\n        );\n        this._tableDsSubscription.add(\n            dataSourceStream.onDataReceived().subscribe(() => {\n                this.onDataReceived.emit();\n                this._internalLoadingState = false;\n                this._firstLoadingDone = true;\n                this._tableService.setTableLoading(this._table.loadingState);\n\n                // Restore normal pagination after the first fetch of data.\n                if (this._table._loadPreviousPages) {\n                    const state = this._tableService.getTableState();\n                    this._tableService.setTableState({\n                        ...state,\n                        ...{\n                            page: {\n                                currentPage: this.initialState?.initialPage || state.page.currentPage,\n                                pageSize: this._table.pageSize || state.page.pageSize\n                            }\n                        }\n                    });\n                    this._table._loadPreviousPages = false;\n                }\n            })\n        );\n\n        // initial data fetch\n        dataSourceStream.fetch(this._tableService.getTableState());\n\n        this._tableDataSource = dataSourceStream;\n    }\n\n    /** @hidden */\n    private _closeDataSource(): void {\n        if (!this._tableDataSource) {\n            return;\n        }\n\n        this._tableDataSource.close();\n\n        this._tableDsSubscription?.unsubscribe();\n        this._tableDsSubscription = null;\n        this._table.clearTableRows();\n    }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TableDataSource } from '../domain';\nimport { TableRowType } from '../enums';\n\nexport type TableRowState = 'editable' | 'readonly';\n\nexport type TableRowSemanticHighlight = 'valid' | 'warning' | 'information' | 'error';\n\nexport interface TableRowKeyboardDrag {\n    direction: 'up' | 'down';\n    event: KeyboardEvent;\n    mode: 'group' | 'shift';\n}\n\n/**\n * Table row entity\n * Used to represent table row in the template\n */\nexport interface TableRow<T = any> {\n    /**\n     * Row semantic type\n     */\n    type: TableRowType.ITEM | TableRowType.GROUP | TableRowType.TREE;\n\n    /**\n     * Indicates if row is selected. It also supports intermediate state\n     */\n    checked: boolean | null;\n\n    checked$?: Observable<TableRow['checked']>;\n\n    /**\n     * Index of a \"value\" in data source list\n     */\n    index: number;\n\n    /**\n     * Data model it represents\n     */\n    readonly value: T;\n\n    /**\n     * Reference to a parent if any\n     */\n    parent: TableRow | null;\n\n    /**\n     * Nesting level\n     */\n    level: number;\n\n    /**\n     * Expandable\n     */\n    expandable: boolean;\n\n    /**\n     * Expanded/Collapsed\n     */\n    expanded: boolean;\n\n    expanded$?: Observable<TableRow['expanded']>;\n\n    childItems$: Observable<T[]>;\n\n    childItemsLoading$: BehaviorSubject<boolean>;\n\n    stateChanged$: Observable<boolean>;\n\n    /**\n     * If item should be hidden. Used to skip rendering\n     */\n    hidden: boolean;\n\n    /**\n     * If the row is navigatable\n     */\n    navigatable: boolean;\n\n    /**\n     * Row state: readonly or editable.\n     */\n    state: TableRowState;\n\n    /**\n     * Children table rows.\n     */\n    children: TableRow<T>[];\n\n    isTree: boolean;\n\n    setRowType: (type: TableRowType) => void;\n\n    lastChild?: TableRow<T>;\n\n    /** Flag indicating that all child rows should be fetched again. */\n    forceFetch: boolean;\n}\n\nexport type TableRowClass<T = any> = string | ((row: T) => string);\n\n/** @hidden */\nexport function isTableRow<T = any>(row: TableRow<T>): row is TableRow<T> {\n    return row && row.type !== undefined && row.value !== undefined && row.index >= 0 && row.state !== undefined;\n}\n\nexport class TableRowImpl<T> implements TableRow<T> {\n    /** @hidden */\n    set checked(value: boolean | null) {\n        this._checkedSubject.next(value);\n    }\n    get checked(): boolean | null {\n        return this._checkedSubject.value;\n    }\n    /** @hidden */\n    readonly checked$: Observable<boolean>;\n    /** @hidden */\n    readonly childItems$: Observable<T[]>;\n\n    /** @hidden */\n    readonly stateChanged$ = new BehaviorSubject<boolean>(false);\n\n    /** @hidden */\n    readonly childItemsLoading$ = new BehaviorSubject<boolean>(false);\n\n    /** @hidden */\n    forceFetch = false;\n\n    /** @hidden */\n    children: TableRow<T>[];\n\n    /** @hidden */\n    expandable: boolean;\n    /** @hidden */\n    set expanded(value: boolean) {\n        this._expandedSubject.next(value);\n        this.children.forEach((childRow) => {\n            childRow.hidden = !value;\n        });\n    }\n    get expanded(): boolean {\n        return this._expandedSubject.value;\n    }\n    /** @hidden */\n    readonly expanded$: Observable<boolean>;\n    /** @hidden */\n    hidden: boolean;\n\n    /** @hidden */\n    index: number;\n    /** @hidden */\n    level: number;\n    /** @hidden */\n    navigatable: boolean;\n    /** @hidden */\n    parent: TableRow | null;\n    /** @hidden */\n    state: TableRowState;\n    /** @hidden */\n    type: TableRowType;\n    /** @hidden */\n    readonly value: T;\n    /** @hidden */\n    childDataSource: TableDataSource<T> | undefined;\n\n    /** @hidden */\n    isTree: boolean;\n\n    /** @hidden */\n    lastChild?: TableRow<T>;\n\n    /** @hidden */\n    private readonly _expandedSubject = new BehaviorSubject<boolean>(false);\n    /** @hidden */\n    private readonly _checkedSubject = new BehaviorSubject<boolean | null>(false);\n\n    /** @hidden */\n    constructor(row: Partial<TableRow>) {\n        this.checked$ = this._checkedSubject.asObservable().pipe(map(Boolean));\n        this.expanded$ = this._expandedSubject.asObservable().pipe(map(Boolean));\n        this.checked = row.checked || false;\n        this.children = row.children || [];\n        this.expandable = row.expandable || false;\n        this.expanded = row.expanded || false;\n        this.hidden = row.hidden || false;\n        this.index = row.index || 0;\n        this.level = row.level || 0;\n        this.navigatable = row.navigatable || false;\n        this.parent = row.parent || null;\n        this.state = row.state || 'readonly';\n        this.value = row.value;\n        this.setRowType(row.type || TableRowType.ITEM);\n    }\n\n    /**\n     * Sets the row type and checks whether the row is a tree.\n     * @param type Row type.\n     */\n    setRowType(type: TableRowType): void {\n        this.type = type;\n        this.isTree = this.type === TableRowType.TREE;\n    }\n}\n","import { dfs, get, isString, set } from '@fundamental-ngx/cdk/utils';\nimport { isDataSource } from '@fundamental-ngx/platform/shared';\nimport { isObservable } from 'rxjs';\nimport { ArrayTableDataSource } from './domain/array-data-source';\nimport { ObservableTableDataSource } from './domain/observable-data-source';\nimport { TableDataSource } from './domain/table-data-source';\nimport { TableRowType } from './enums/row-type.enum';\nimport { SelectionMode, SelectionModeValue } from './enums/selection-mode.enum';\nimport { SortDirection } from './enums/sort-direction.enum';\nimport { CollectionGroup } from './interfaces/collection-group.interface';\nimport { FdpTableDataSource } from './models/data-source.type';\nimport { RowComparator } from './models/row-comparator.model';\nimport { TableRow, TableRowImpl, isTableRow } from './models/table-row.model';\nimport { GroupTableRowValueType, TreeLike } from './models/tree-table.model';\nimport { TableColumn } from './table-column';\n\n/** @hidden */\nexport function newTableRow<T = any>(row: Partial<TableRow<T>>): TableRow<T> {\n    if (!row.value) {\n        throw new Error('Unexpected value. TableRow.value cannot be undefined.');\n    }\n\n    return new TableRowImpl({\n        type: row.type || TableRowType.ITEM,\n        checked: row.checked || false,\n        index: row.index || 0,\n        value: row.value,\n        parent: row.parent || null,\n        level: row.level || 0,\n        expandable: row.expandable || false,\n        expanded: row.expanded || false,\n        hidden: row.hidden || false,\n        navigatable: row.navigatable || false,\n        state: row.state || 'readonly',\n        children: row.children || []\n    });\n}\n\n/** @hidden */\nexport function getSelectableRows(rows: TableRow[], selectableKey: string): TableRow[] {\n    return rows.filter((row) => isSelectableRow(row, selectableKey));\n}\n\n/** @hidden */\nexport function isSelectableRow(row: TableRow, selectableKey: string): boolean {\n    return (isItemRow(row) || isTreeRow(row)) && row.value[selectableKey] !== false;\n}\n\n/** @hidden */\nexport function isItemRow(row: TableRow): boolean {\n    return row.type === TableRowType.ITEM;\n}\n\n/** @hidden */\nexport function isTreeRow(row: TableRow): boolean {\n    return row.type === TableRowType.TREE;\n}\n\n/**\n * Since we dont work with the tree, we need to convert incoming tree to\n * flat format while maintaining original state.\n *\n * @hidden\n */\nexport function convertTreeTableRowToFlatList<T>(rows: TableRow<T>[], rowNavigatable: string | boolean): TableRow<T>[] {\n    let flatList: TableRow[] = [];\n\n    for (const item of rows) {\n        item.navigatable = isRowNavigatable(item as T, rowNavigatable);\n        flatList.push(item);\n\n        if (Array.isArray(item.children)) {\n            item.children.forEach((c) => (c.hidden = !item.expanded));\n            flatList = flatList.concat(convertTreeTableRowToFlatList(item.children, rowNavigatable));\n        }\n    }\n    return flatList;\n}\n\n/** @hidden */\nexport function isRowNavigatable<T>(row: T, rowNavigatable: string | boolean): boolean {\n    if (!row) {\n        return false;\n    }\n\n    /** If key of the row's item field passed */\n    if (isString(rowNavigatable)) {\n        return !!row[rowNavigatable as string];\n    }\n\n    return !!rowNavigatable;\n}\n\n/** @hidden */\nexport function getFreezableColumns(columns: TableColumn[], freezeColumnsTo: string): Map<string, number> {\n    const columnNames = new Map<string, number>();\n\n    if (!columns.length || !freezeColumnsTo) {\n        return columnNames;\n    }\n\n    for (const column of columns) {\n        if (!column.name) {\n            continue;\n        }\n\n        // using columnNames.size as index of a column\n        columnNames.set(column.name, columnNames.size);\n\n        if (column.name === freezeColumnsTo) {\n            return columnNames;\n        }\n    }\n\n    return new Map();\n}\n\n/** @hidden */\nexport function getFreezableEndColumns(columns: TableColumn[], freezeEndColumnsTo: string): Map<string, number> {\n    const columnNames = new Map<string, number>();\n\n    if (!columns.length || !freezeEndColumnsTo) {\n        return columnNames;\n    }\n\n    for (let i = columns.length - 1; i >= 0; i--) {\n        // using columnNames.size as index of a column\n        columnNames.set(columns[i].name, columnNames.size);\n\n        if (columns[i].name === freezeEndColumnsTo) {\n            return columnNames;\n        }\n    }\n\n    return new Map();\n}\n\n/** @hidden */\nexport function convertTreeObjectsToTableRows<T>(\n    source: T[],\n    selectionMode: SelectionModeValue,\n    tableRows: TableRow<T>[],\n    rowComparator: RowComparator<T>,\n    relationKey: string,\n    hasChildrenKey: string,\n    selectedKey: string,\n    expandedStateKey: string,\n    rowNavigatable: string | boolean,\n    enableTristateMode = false\n): TableRow<T>[] {\n    const rows: TableRow<T>[] = [];\n    const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, tableRows, rowComparator);\n\n    source.forEach((item: T, index: number) => {\n        const hasChildren =\n            Object.prototype.hasOwnProperty.call(item, relationKey) &&\n            Array.isArray(item[relationKey]) &&\n            item[relationKey].length;\n\n        const row = isTableRow(item as TableRow<T>)\n            ? (item as TableRow<T>)\n            : newTableRow({\n                  type: hasChildren || item[hasChildrenKey] === true ? TableRowType.TREE : TableRowType.ITEM,\n                  checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n                  index,\n                  value: item\n              });\n\n        row.expanded =\n            expandedStateKey && Object.prototype.hasOwnProperty.call(item, expandedStateKey)\n                ? item[expandedStateKey]\n                : false;\n        row.navigatable = isRowNavigatable(item, rowNavigatable);\n        rows.push(row);\n\n        if (hasChildren) {\n            const children = convertTreeObjectsToTableRows(\n                item[relationKey],\n                selectionMode,\n                tableRows,\n                rowComparator,\n                relationKey,\n                hasChildrenKey,\n                selectedKey,\n                expandedStateKey,\n                rowNavigatable,\n                enableTristateMode\n            );\n\n            children.forEach((c) => {\n                c.parent = c.parent || row;\n                c.level = c.parent.level + 1;\n                c.hidden = !c.parent.expanded;\n            });\n            row.children.push(...children);\n\n            rows.push(...children);\n        }\n        if (row.level === 0 && row.isTree) {\n            dfs([row], (r) => {\n                const children = r.children || [];\n                const selectedChildren: TableRow<T>[] = [];\n                const indeterminateChildren: TableRow<T>[] = [];\n                children.forEach((child) => {\n                    if (child.checked === true) {\n                        selectedChildren.push(child);\n                    } else if (child.checked === null) {\n                        indeterminateChildren.push(child);\n                    }\n                });\n\n                const selectedAll = selectedChildren.length === children.length && children.length > 0;\n                const selectedSome = selectedChildren.length > 0;\n                if (r.checked && selectionMode === SelectionMode.MULTIPLE) {\n                    applySelectionToChildren(rows, r, [], []);\n                    return;\n                }\n                if (!enableTristateMode) {\n                    return;\n                }\n                if (selectedAll) {\n                    r.checked = true;\n                    return;\n                }\n                if (selectedSome || indeterminateChildren.length > 0) {\n                    r.checked = null;\n                    return;\n                }\n            });\n        }\n    });\n\n    return rows;\n}\n\n/**\n * @hidden\n * Runs `rowComparator` function against checked rows and compares them with the new `source`\n * If matched, creates an association between the source item and checked status of corresponding row.\n *\n * @returns `Map` object with the `checked` status for particular source item\n */\nexport function getSelectionStatusByRowValue<T>(\n    source: T[],\n    selectionMode: SelectionModeValue,\n    tableRows: TableRow[],\n    rowComparator: RowComparator<T>\n): Map<T, boolean | null> {\n    const rowMap = new Map<T, boolean | null>();\n    if (\n        (selectionMode === SelectionMode.SINGLE || selectionMode === SelectionMode.MULTIPLE) &&\n        typeof rowComparator === 'function'\n    ) {\n        const checkedRows = tableRows.filter((r) => r.checked);\n        checkedRows.forEach((row) => {\n            const found = source.find((e) => rowComparator(row.value, e));\n            if (found) {\n                rowMap.set(found, row.checked);\n            }\n        });\n    }\n    return rowMap;\n}\n\n/** @hidden */\nexport function applySelectionToChildren<T>(\n    allRows: Array<TableRow<T>>,\n    row: TableRow,\n    addedRows: TableRow<T>[],\n    removedRows: TableRow<T>[]\n): void {\n    const allChildren = findRowChildren(row, allRows);\n\n    allChildren.forEach((r) => {\n        r.checked = row.checked;\n        r.checked ? addedRows.push(r) : removedRows.push(r);\n    });\n}\n\n/** @hidden */\nexport function findRowChildren<T>(row: TableRow<T>, allRows: TableRow<T>[]): TableRow<T>[] {\n    const rowsLength = allRows.length;\n\n    /**\n     * Since we are dealing with a flat list\n     * it means all children go next right after the expandable row\n     * until the next row has a mutual parent\n     */\n\n    let index = allRows.indexOf(row);\n    const parents = getRowParents(row);\n    const children: TableRow<T>[] = [];\n\n    while (index++ < rowsLength) {\n        const nextRow = allRows[index];\n        if (!nextRow?.parent || parents.includes(nextRow.parent)) {\n            break;\n        }\n        children.push(nextRow);\n    }\n\n    return children;\n}\n\n/**\n * Get row parents path where the first is the direct parent\n * @param row Row which parents we need to find\n * @param untilParent Parent to stop a search on. Default is \"null\" that means look up until the root\n * @returns parents list [direct parent, ..., ancestor]\n * @hidden\n */\nexport function getRowParents<T>(row: TableRow<T>, untilParent: TableRow<T> | null = null): TableRow<T>[] {\n    untilParent = untilParent || null; // to avoid \"undefined\"\n    const parents: TableRow<T>[] = [];\n    let parent = row.parent || null; // empty parent should be coerced to \"null\" do not get into infinite loop\n    while (parent && parent !== untilParent) {\n        parents.push(parent);\n        parent = parent.parent || null;\n    }\n    return parents;\n}\n\n/** @hidden */\nexport function toDataStream<T>(source: FdpTableDataSource<T>): TableDataSource<T> | undefined {\n    if (isDataSource(source)) {\n        return source as TableDataSource<T>;\n    }\n\n    if (Array.isArray(source)) {\n        return new ArrayTableDataSource(source);\n    }\n\n    if (isObservable(source)) {\n        return new ObservableTableDataSource(source);\n    }\n\n    return undefined;\n}\n/**\n * @hidden\n * Creates an empty column skeleton object.\n * @returns Column model.\n */\nexport function buildNewRowSkeleton<T>(editableRowSkeleton: T, columns: TableColumn[]): T {\n    if (editableRowSkeleton) {\n        return structuredClone(editableRowSkeleton);\n    }\n\n    let newRow = {};\n    columns.forEach((column) => {\n        newRow = set(newRow, column.key, undefined);\n    });\n\n    return newRow as T;\n}\n\n/** @hidden */\nexport function isGroupRow(row: TableRow): boolean {\n    return row.type === TableRowType.GROUP;\n}\n\n/** @hidden */\nexport function sortTreeLikeGroupedRows(\n    groupedRows: TreeLike<TableRow>[],\n    groupRulesMap: Map<string, CollectionGroup>\n): TreeLike<TableRow>[] {\n    if (!groupedRows[0] || !isGroupRow(groupedRows[0])) {\n        return groupedRows;\n    }\n\n    const treeLikeRows = groupedRows as TreeLike<TableRow<GroupTableRowValueType>>[];\n    const firstRow = treeLikeRows[0];\n\n    treeLikeRows.forEach((group) => {\n        if (group._children) {\n            group._children = sortTreeLikeGroupedRows(group._children, groupRulesMap);\n        }\n    });\n\n    const groupRule = groupRulesMap.get(firstRow.value.field);\n\n    if (!groupRule || groupRule.direction === SortDirection.NONE) {\n        return treeLikeRows;\n    }\n\n    const direction = groupRule.direction;\n    const directionMultiplier = direction === SortDirection.ASC ? 1 : direction === SortDirection.DESC ? -1 : 0;\n\n    return treeLikeRows.slice().sort((a, b) => {\n        const aValue = a.value.value as any;\n        const bValue = b.value.value as any;\n\n        const aNumber = Number.parseFloat(aValue);\n        const bNumber = Number.parseFloat(bValue);\n        if (!Number.isNaN(aNumber) && !Number.isNaN(bNumber)) {\n            return (aNumber - bNumber) * directionMultiplier;\n        }\n\n        return (aValue > bValue ? 1 : -1) * directionMultiplier;\n    });\n}\n\n/** @hidden */\nexport function convertTreeLikeToFlatList<K>(treeLikeList: TreeLike<K>[]): K[] {\n    let flatList: K[] = [];\n\n    for (const item of treeLikeList) {\n        flatList.push(item);\n\n        if (Array.isArray(item._children)) {\n            flatList = flatList.concat(convertTreeLikeToFlatList(item._children));\n            delete item._children;\n        }\n    }\n\n    return flatList;\n}\n\n/**\n * @hidden\n * Group table rows and return tree like rows list.\n * It's intended to be called recursively.\n * @param rules group rules to group by\n * @param rows source table rows\n * @param parent row parent\n * @param level level of nesting\n */\nexport function createGroupedTableRowsTree(\n    rules: CollectionGroup[],\n    rows: TableRow[],\n    parent: TableRow | null = null,\n    level = 0\n): TreeLike<TableRow>[] {\n    rules = [...rules];\n\n    if (!rules.length) {\n        // no rules mean that it's the level of source items\n        return rows.map((row) => {\n            row.parent = parent;\n            row.level = level;\n            row.hidden = !!parent && !parent.expanded;\n            return row;\n        });\n    }\n\n    // Retrieve first group rule\n    const rule = rules.shift()!;\n\n    // Build map of unique values for a given group rule\n    const valuesHash = rows\n        .filter((r) => r.state !== 'editable')\n        .reduce((hash, row) => {\n            const modelValue = get(row.value, rule.field);\n\n            if (!hash.has(modelValue)) {\n                hash.set(modelValue, []);\n            }\n\n            hash.get(modelValue)?.push(row);\n\n            return hash;\n        }, new Map<unknown, TableRow[]>());\n\n    // Build table rows tree\n    let groupedTableRows: TreeLike<TableRow>[] = [];\n\n    if (rows.some((r) => r.state === 'editable')) {\n        groupedTableRows = rows\n            .filter((r) => r.state === 'editable')\n            .map((row) => {\n                row.parent = parent;\n                row.level = -1;\n                row.hidden = !!parent && !parent.expanded;\n                return row;\n            });\n    }\n\n    for (const [value, values] of Array.from(valuesHash)) {\n        const filteredRows = rows.filter((_item) => values.includes(_item));\n\n        if (filteredRows.length === 0) {\n            continue;\n        }\n\n        const groupTableRow: TreeLike<TableRow<GroupTableRowValueType>> = newTableRow<GroupTableRowValueType>({\n            type: TableRowType.GROUP,\n            checked: false,\n            index: 0,\n            value: { field: rule.field, value, count: 0 },\n            parent,\n            level,\n            expandable: true,\n            expanded: true,\n            hidden: !!parent && !parent.expanded\n        });\n\n        // Ads group's children rows\n        groupTableRow._children = createGroupedTableRowsTree(rules, filteredRows, groupTableRow, level + 1);\n\n        groupTableRow.value.count = groupTableRow._children?.length;\n\n        groupedTableRows.push(groupTableRow);\n    }\n\n    return groupedTableRows;\n}\n\n/** @hidden */\nexport function convertObjectsToTableRows<T>(\n    source: T[],\n    addedItems: T[],\n    selectedKey: string,\n    rowNavigatable: boolean | string,\n    selectionMode: SelectionModeValue,\n    rows: TableRow[],\n    rowComparator: RowComparator\n): TableRow<T>[] {\n    const rowItem = source[0] as any;\n\n    if (isTableRow(rowItem)) {\n        return source as TableRow[];\n    }\n\n    const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, rows, rowComparator);\n    return source.map((item: T, index: number) => {\n        const isNewItem = addedItems.includes(item);\n        const row = newTableRow({\n            type: TableRowType.ITEM,\n            checked: item[selectedKey] ?? !!selectedRowsMap.get(item),\n            index,\n            value: item\n        });\n        row.navigatable = isRowNavigatable(item, rowNavigatable);\n        row.state = isNewItem ? 'editable' : 'readonly';\n        return row;\n    });\n}\n\n/** @hidden */\nexport function isTreeRowFirstCell(cellIndex: number, row: TableRow, event?: Event): boolean {\n    return (cellIndex === 0 && isTreeRow(row)) || (!!event && !row.isTree);\n}\n","import { Table } from '../table';\nimport { TableColumn } from '../table-column';\n\nexport interface TableColumnFreezeInternalEvent {\n    name: TableColumn['name'];\n    endFreezable: TableColumn['endFreezable'];\n}\n\nexport interface FreezeChange {\n    current: string | null;\n    previous: string | null;\n    end?: boolean;\n}\n\nexport class TableColumnFreezeEvent {\n    /**\n     * Table column freeze event\n     * @param source Table component\n     * @param current Current freezeTo column\n     * @param previous Previous freezeTo column\n     */\n    constructor(\n        public source: Table,\n        public current: string | null,\n        public previous: string | null\n    ) {}\n}\n","import { Table } from '../table';\n\nexport class ColumnsChange {\n    /**\n     * Columns change event\n     * @param current Current columns\n     * @param previous Previous columns\n     */\n    constructor(\n        public current: string[],\n        public previous: string[]\n    ) {}\n}\n\nexport class TableColumnsChangeEvent extends ColumnsChange {\n    /**\n     * Table columns change event\n     * @param source Table component\n     * @param current Current columns\n     * @param previous Previous columns\n     */\n    constructor(\n        public source: Table,\n        current: string[],\n        previous: string[]\n    ) {\n        super(current, previous);\n    }\n}\n","import { EventEmitter } from '@angular/core';\nimport { DragoverPredicate, DropPredicate, FdDndDropType, FdDropEvent } from '@fundamental-ngx/cdk/utils';\nimport { Observable } from 'rxjs';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { Table } from '../table';\nimport { TableRow } from './table-row.model';\nimport { TableRowsRearrangeEvent } from './table-rows-rearrange-event.model';\n\nexport abstract class TableDraggable<T = any> {\n    abstract dragDropInProgress: boolean;\n    abstract enableRowReordering: boolean;\n    abstract isTreeTable: boolean;\n    abstract dropMode: FdDndDropType;\n    abstract dropPredicate: DropPredicate<TableRow<T>>;\n    abstract dragoverPredicate: DragoverPredicate<TableRow<T>>;\n    abstract rowsRearrange: EventEmitter<TableRowsRearrangeEvent<T>>;\n    abstract draggedRow: TableRow<T> | null;\n    abstract draggedDndIndex: number | null;\n    abstract draggedRowGlobalIndex: number | null;\n    abstract dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void;\n    abstract dragDropItemDrop(event: FdDropEvent<TableRow>): void;\n    abstract dragDropStart(draggedItem?: TableRow<T>, dndIndex?: number, globalIndex?: number): void;\n    abstract setTable(table: Table): void;\n    abstract dropCancelled(): void;\n}\n\nexport abstract class TableInitialState {\n    abstract initialSortBy: CollectionSort[];\n    abstract initialVisibleColumns: string[];\n    abstract initialFilterBy: CollectionFilter[];\n    abstract initialGroupBy: CollectionGroup[];\n    abstract initialPage: number;\n    abstract state: TableState;\n    abstract setTable(table: Table): void;\n    abstract setInitialState(): void;\n}\n\nexport abstract class TableVirtualScroll {\n    abstract rowHeight: number;\n    abstract secondaryRowHeight: number | undefined;\n    abstract virtualScrollTransform$: Observable<number>;\n    abstract virtualScroll: boolean;\n    abstract virtualScrollTotalHeight: number;\n    abstract scrollWholeRows: boolean;\n    abstract setTable(table: Table): void;\n    abstract listenOnVirtualScroll(): void;\n    abstract calculateVirtualScrollRows(): void;\n}\n","import { CollectionFilter } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface FilterChange {\n    current: CollectionFilter[];\n    previous: CollectionFilter[];\n}\n\nexport class TableFilterChangeEvent {\n    /**\n     * Table filter change event\n     * @param source Table component\n     * @param current Current filters\n     * @param previous Previous filters\n     */\n    constructor(\n        public source: Table,\n        public current: CollectionFilter[],\n        public previous: CollectionFilter[]\n    ) {}\n}\n","import { CollectionGroup } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface GroupChange {\n    current: CollectionGroup[];\n    previous: CollectionGroup[];\n}\n\nexport class TableGroupChangeEvent {\n    /**\n     * Table group change event\n     * @param source Table component\n     * @param current Current groups\n     * @param previous Previous groups\n     */\n    constructor(\n        public source: Table,\n        public current: CollectionGroup[],\n        public previous: CollectionGroup[]\n    ) {}\n}\n","import { CollectionPage } from '../interfaces';\nimport { Table } from '../table';\n\nexport class PageChange {\n    /**\n     * Page change event\n     * @param current Current page\n     * @param previous Previous page\n     */\n    constructor(\n        public current: CollectionPage,\n        public previous: CollectionPage\n    ) {}\n}\n\nexport class TablePageChangeEvent extends PageChange {\n    /**\n     * Table page change event\n     * @param source Table component\n     * @param current Current page\n     * @param previous Previous page\n     */\n    constructor(\n        public source: Table,\n        current: CollectionPage,\n        previous: CollectionPage\n    ) {\n        super(current, previous);\n    }\n}\n","export class SaveRowsEvent<T> {\n    /**\n     * Table save rows event\n     * @param done Callback function. Call it when newly added items has been saved and new data source fetch is needed.\n     * @param items Array of newly created items.\n     */\n    constructor(\n        public done: () => void,\n        public items: T[]\n    ) {}\n}\n","import { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { Table } from '../table';\n\nexport interface SearchChange {\n    current: SearchInput;\n    previous: SearchInput;\n}\n\nexport class TableSearchChangeEvent {\n    /**\n     * Table search change event\n     * @param source Table component\n     * @param current Current search (fields, directions)\n     * @param previous Previous search (fields, directions)\n     */\n    constructor(\n        public source: Table,\n        public current: SearchInput,\n        public previous: SearchInput\n    ) {}\n}\n","import { Table } from '../table';\n\nexport class TableSelectionChangeEvent<T> {\n    /** currently selected items */\n    selection: T[];\n    /** Items added */\n    added: T[]; //\n    /** Items removed */\n    removed: T[];\n    /** Indexes location of additions or removals */\n    index: number[];\n    /** Whether `Check/Uncheck` all checkbox was pressed. */\n    all?: boolean;\n}\n\nexport class TableRowSelectionChangeEvent<T> extends TableSelectionChangeEvent<T> {\n    /** Table component */\n    source: Table;\n}\n","import { CollectionSort } from '../interfaces';\nimport { Table } from '../table';\n\nexport interface SortChange {\n    current: CollectionSort[];\n    previous: CollectionSort[];\n}\n\nexport class TableSortChangeEvent {\n    /**\n     * Table sort change event\n     * @param source Table component\n     * @param current Current sort (fields, directions)\n     * @param previous Previous sort (fields, directions)\n     */\n    constructor(\n        public source: Table,\n        public current: CollectionSort[],\n        public previous: CollectionSort[]\n    ) {}\n}\n","export class TableCellActivateEvent<T> {\n    /**\n     * Table cell activate event\n     * @param columnIndex Index of the clicked column\n     * @param row Row that was activated\n     */\n    constructor(\n        public columnIndex: number,\n        public row: T\n    ) {}\n}\n","/** Common properties for table dialogs */\n\nexport interface TableDialogCommonData {\n    // nothing here yet - placeholder for tslint\n    _placeholder?: unknown;\n}\n","export class TableRowActivateEvent<T> {\n    /**\n     * Table row activate event\n     * @param index Index of the activated row\n     * @param ctrlKey Whether control/command key was pressed during the mouse/keyboard event\n     * @param row Row that was activated\n     */\n    constructor(\n        public index: number,\n        public ctrlKey: boolean,\n        public row: T\n    ) {}\n}\n","export class TableRowToggleOpenStateEvent<T> {\n    /**\n     * Table row toggle open state event\n     * @param index Index of the row\n     * @param row Row that was toggled\n     * @param expanded Expanded state of the row\n     */\n    constructor(\n        public index: number,\n        public row: T,\n        public expanded: boolean\n    ) {}\n}\n","import { FdDndDropEventMode } from '@fundamental-ngx/cdk/utils';\n\nexport class TableRowsRearrangeEvent<T> {\n    /**\n     * Table rows rearrange event\n     * @param row Row that was rearranged\n     * @param dropRow Row where the dragged item has been dropped\n     * @param previousIndex Previous index of the row\n     * @param newIndex New index of the row\n     * @param insertAt Whether dragged the row was inserted before or after the dropped row\n     * @param mode Whether the dropped element shifts other items or is grouped with them\n     * @param rows All rows of the table in the state they exist on the datasource\n     */\n    constructor(\n        public row: T,\n        public dropRow: T,\n        public previousIndex: number,\n        public newIndex: number,\n        public insertAt: 'before' | 'after' | null,\n        public mode: FdDndDropEventMode,\n        public rows: T[]\n    ) {}\n}\n","import {\n    DOWN_ARROW,\n    END,\n    HOME,\n    LEFT_ARROW,\n    PAGE_DOWN,\n    PAGE_UP,\n    RIGHT_ARROW,\n    SPACE,\n    UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n    ChangeDetectorRef,\n    Directive,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    inject,\n    Input,\n    OnDestroy,\n    Output\n} from '@angular/core';\nimport {\n    DragoverPredicate,\n    DropPredicate,\n    FdDndDropEventMode,\n    FdDndDropType,\n    FdDropEvent,\n    KeyUtil\n} from '@fundamental-ngx/cdk/utils';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE } from '../constants';\nimport { TableRowType } from '../enums';\nimport { findRowChildren, getRowParents } from '../helpers';\nimport { TableRow, TableRowsRearrangeEvent, UpdatedDndRowsPosition } from '../models';\nimport { TableDraggable } from '../models/directives';\nimport { Table } from '../table';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'fdp-table[isTreeTable], fdp-table[enableRowReordering]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_TABLE_DRAGGABLE_DIRECTIVE,\n            useExisting: forwardRef(() => TableDraggableDirective)\n        }\n    ]\n})\nexport class TableDraggableDirective<T = any> extends TableDraggable<T> implements OnDestroy {\n    /** Whether to allow for row reordering on tree tables via drag and drop. */\n    @Input()\n    enableRowReordering = true;\n\n    /** Whether tree mode is enabled. */\n    @HostBinding('class.fd-table--tree')\n    @Input()\n    isTreeTable = false;\n\n    /**\n     * Row drop mode.\n     */\n    @Input()\n    dropMode: FdDndDropType = 'auto';\n\n    /** Predicate function that checks whether the item can be dropped over another item. */\n    @Input()\n    dropPredicate: DropPredicate<TableRow<T>>;\n\n    /**\n     * Predicate function that checks whether the item can be dragged over another item.\n     * If the function returns `false`, dragged over item will not be highlighted, and drop event will be canceled.\n     */\n    @Input()\n    dragoverPredicate: DragoverPredicate<TableRow<T>>;\n\n    /** Event fired when tree rows rearranged through drag & drop. Consider that rows rearranged with their children rows. */\n    @Output()\n    readonly rowsRearrange = new EventEmitter<TableRowsRearrangeEvent<T>>();\n\n    /** @hidden */\n    get _rowsDraggable(): boolean {\n        return this.isTreeTable && this.enableRowReordering;\n    }\n\n    /** Get the dragged row object during drag operation */\n    get draggedRow(): TableRow | null {\n        return this._draggedRowObject;\n    }\n\n    /** Get the DnD index of the dragged row */\n    get draggedDndIndex(): number | null {\n        return this._draggedRowDndIndex;\n    }\n\n    /** Get the global index (in _tableRowsVisible) of the dragged row */\n    get draggedRowGlobalIndex(): number | null {\n        return this._draggedRowGlobalIndex;\n    }\n\n    /** @hidden */\n    dragDropInProgress = false;\n\n    /** @hidden */\n    private _draggedRowObject: TableRow | null = null;\n\n    /** @hidden */\n    private _draggedRowDndIndex: number | null = null;\n\n    /** @hidden */\n    private _draggedRowGlobalIndex: number | null = null;\n\n    /** @hidden */\n    private _table: Table;\n\n    /** @hidden */\n    private readonly _cdr = inject(ChangeDetectorRef, {\n        host: true\n    });\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._setDragInProgress(false);\n    }\n\n    /** Sets table reference. */\n    setTable(table: Table): void {\n        this._table = table;\n    }\n\n    /**\n     * Initiates drag&drop sequence.\n     */\n    dragDropStart(draggedItem?: TableRow, dndIndex?: number, globalIndex?: number): void {\n        this._setDragInProgress(true);\n        if (draggedItem) {\n            this._draggedRowObject = draggedItem;\n        }\n        if (dndIndex || dndIndex === 0) {\n            this._draggedRowDndIndex = dndIndex;\n        }\n        if (globalIndex || globalIndex === 0) {\n            this._draggedRowGlobalIndex = globalIndex;\n        }\n    }\n\n    /** Method called when dnd performed with the keyboard. */\n    dragRowFromKeyboard(dir: string, event: Event, currentRowIndex: number, mode: 'shift' | 'group'): void {\n        if (!this._rowsDraggable) {\n            return;\n        }\n        event.preventDefault();\n        let replacedIndex;\n        dir === 'up' ? (replacedIndex = currentRowIndex - 1) : (replacedIndex = currentRowIndex + 1);\n\n        if (this._table._tableRowsVisible[replacedIndex]) {\n            const dragDropEvent: FdDropEvent<TableRow<T>> = {\n                items: this._table._tableRowsVisible,\n                draggedItemIndex: currentRowIndex,\n                replacedItemIndex: replacedIndex,\n                insertAt: dir === 'down' ? 'after' : 'before',\n                mode\n            };\n            this.dragDropItemDrop(dragDropEvent);\n            setTimeout(() => {\n                (event.target as HTMLElement).focus();\n            });\n        }\n    }\n\n    /** Method called when drag&drop event being cancelled. */\n    dropCancelled(): void {\n        /** After timeout to make click event handled first */\n        setTimeout(() => {\n            this._setDragInProgress(false);\n            this._draggedRowObject = null;\n            this._draggedRowDndIndex = null;\n            this._draggedRowGlobalIndex = null;\n        });\n    }\n\n    /** Method called when dragged item being dropped. */\n    dragDropItemDrop(event: FdDropEvent<TableRow>): void {\n        if (this.isTreeTable && event.draggedItemIndex !== event.replacedItemIndex) {\n            // Map DnD indices to actual table row indices\n            event.replacedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.replacedItemIndex];\n\n            // Use the tracked dragged row object instead of relying on the stale draggedItemIndex\n            let dragRow = this._draggedRowObject;\n            if (!dragRow) {\n                // Fallback to old behavior if tracking failed\n                // If virtual scroll with scrollWholeRows, map the DnD index to global index\n                if (this._table._virtualScrollDirective?.scrollWholeRows) {\n                    event.draggedItemIndex = this._table._tableCurrentlyRenderedRowsPlaceholder[event.draggedItemIndex];\n                }\n                dragRow =\n                    this._table._tableRows.find(\n                        (row) => row === this._table._tableRowsVisible[event.draggedItemIndex]\n                    ) ?? null;\n            }\n\n            const dropRow = this._table._tableRows.find(\n                (row) => row === this._table._tableRowsVisible[event.replacedItemIndex]\n            );\n\n            if (!dragRow || !dropRow || this._isDroppedInsideItself(dropRow, dragRow)) {\n                // Clear drag state before returning\n                this._setDragInProgress(false);\n                this._draggedRowObject = null;\n                this._draggedRowDndIndex = null;\n                this._draggedRowGlobalIndex = null;\n                return;\n            }\n\n            // Clear drag tracking state before updating the table\n            // This ensures setCurrentlyRenderedRows() doesn't preserve the dragged row\n            this._draggedRowObject = null;\n            this._draggedRowDndIndex = null;\n            this._draggedRowGlobalIndex = null;\n\n            this._dragDropUpdateDragParentRowAttributes(dragRow);\n            this._dragDropRearrangeTreeRows(dragRow, dropRow, event);\n            this._dragDropUpdateDropRowAttributes(dragRow, dropRow, event.mode);\n\n            if (!dropRow.expanded && event.mode === 'group') {\n                this._table.toggleExpandableTableRow(dropRow, true);\n            } else {\n                this._table.onTableRowsChanged();\n            }\n\n            this._cdr.detectChanges();\n            this._emitRowsRearrangeEvent(dragRow, dropRow, event);\n            this._table.refreshDndList();\n        }\n\n        /** After timeout to make click event handled first */\n        setTimeout(() => {\n            this._setDragInProgress(false);\n        });\n    }\n\n    /**\n     * @hidden\n     * Create table rows rearrange event\n     */\n    _emitRowsRearrangeEvent(row: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n        const rows: any[] = [];\n\n        this._table._tableRows.forEach((r, index) => {\n            r.index = index;\n            rows.push(r.value);\n        });\n\n        // Find the actual indices in _tableRows for the dragged and dropped rows\n        const actualDraggedIndex = this._table._tableRows.indexOf(row);\n        const actualReplacedIndex = this._table._tableRows.indexOf(dropRow);\n\n        this.rowsRearrange.emit(\n            new TableRowsRearrangeEvent(\n                row.value,\n                dropRow.value,\n                actualDraggedIndex,\n                actualReplacedIndex,\n                event.insertAt,\n                event.mode,\n                rows\n            )\n        );\n    }\n\n    /** @hidden */\n    private _setDragInProgress(dragging: boolean): void {\n        this.dragDropInProgress = dragging;\n        dragging ? this._blockScrolling() : this._enableScrolling();\n    }\n\n    /** @hidden */\n    private _isDroppedInsideItself(dropRow: TableRow, dragRow: TableRow): boolean {\n        const dropRowParents = getRowParents(dropRow);\n        return !!dropRowParents.find((row) => row === dragRow);\n    }\n\n    /** @hidden */\n    private _dragDropUpdateDragParentRowAttributes(dragRow: TableRow): void {\n        const parentRow = dragRow.parent;\n\n        if (!parentRow) {\n            return;\n        }\n\n        const parentRowChildren = findRowChildren(parentRow, this._table._tableRows);\n        const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n        if (parentRowChildren.length - (dragRowChildren.length + 1) === 0) {\n            parentRow.setRowType(TableRowType.ITEM);\n        }\n    }\n\n    /** @hidden */\n    private _dragDropUpdateDropRowAttributes(dragRow: TableRow, dropRow: TableRow, mode: FdDndDropEventMode): void {\n        if (dragRow.parent) {\n            // Remove child row from previous parent row.\n            dragRow.parent.children.splice(dragRow.parent.children.indexOf(dragRow), 1);\n        }\n        dragRow.level = dropRow.level + (mode === 'group' ? 1 : 0);\n\n        if (mode === 'group') {\n            dragRow.parent = dropRow;\n            if (!dropRow.isTree) {\n                dropRow.setRowType(TableRowType.TREE);\n            }\n\n            dropRow.children.push(dragRow);\n            dropRow.lastChild = dragRow;\n        } else {\n            dragRow.parent = dropRow.parent;\n            dropRow.parent?.children.push(dragRow);\n            if (dropRow.parent) {\n                dropRow.parent.lastChild = dragRow;\n            }\n        }\n\n        const children = findRowChildren(dragRow, this._table._tableRows);\n        children.forEach((row) => {\n            row.level = getRowParents(row).length;\n        });\n    }\n\n    /** @hidden */\n    private _dragDropRearrangeTreeRows(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n        if (event.mode === 'shift') {\n            this._handleShiftDropAction(dragRow, dropRow, event);\n        } else {\n            this._handleReplaceDropAction(dragRow, dropRow);\n        }\n    }\n\n    /** @hidden */\n    private _getNewDragDropRowsPosition(dragRow: TableRow, dropRow: TableRow): UpdatedDndRowsPosition {\n        const allRows = this._table._tableRows;\n\n        const dragRowIndex = allRows.findIndex((row) => row === dragRow);\n        const dragRowChildren = findRowChildren(dragRow, this._table._tableRows);\n\n        const rowsToMove = allRows.splice(dragRowIndex, dragRowChildren.length + 1);\n\n        const dropRowIndex = allRows.findIndex((row) => row === dropRow);\n        const dropRowChildren = findRowChildren(dropRow, this._table._tableRows);\n\n        const dropRowItemsLength = dropRowChildren.length + 1;\n\n        const rowsAfterDropRow = allRows.splice(dropRowIndex + dropRowItemsLength, allRows.length + dropRowItemsLength);\n        const dropRowItems = allRows.splice(dropRowIndex, dropRowItemsLength);\n\n        return {\n            allRows,\n            rowsToMove,\n            rowsAfterDropRow,\n            dropRowItems\n        };\n    }\n\n    /** @hidden */\n    private _handleShiftDropAction(dragRow: TableRow, dropRow: TableRow, event: FdDropEvent<TableRow>): void {\n        const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n            dragRow,\n            dropRow\n        );\n\n        this._table._tableRows = [\n            ...allRows,\n            ...(event.insertAt === 'after' ? dropRowItems : []),\n            ...rowsToMove,\n            ...(event.insertAt === 'after' ? [] : dropRowItems),\n            ...rowsAfterDropRow\n        ];\n    }\n\n    /** @hidden */\n    private _handleReplaceDropAction(dragRow: TableRow, dropRow: TableRow): void {\n        const { allRows, rowsToMove, rowsAfterDropRow, dropRowItems } = this._getNewDragDropRowsPosition(\n            dragRow,\n            dropRow\n        );\n\n        this._table._tableRows = [...allRows, ...dropRowItems, ...rowsToMove, ...rowsAfterDropRow];\n    }\n\n    /** @hidden */\n    private _blockScrolling(): void {\n        this._table._focusableGrid._preventKeydown = true;\n        // Don't block wheel events if scrollWholeRows is enabled - virtual scroll needs them\n        if (!this._table._virtualScrollDirective?.scrollWholeRows) {\n            this._table.tableContainer.nativeElement.addEventListener('DOMMouseScroll', preventDefault, false);\n            this._table.tableContainer.nativeElement.addEventListener('wheel', preventDefault, { passive: false });\n            this._table.tableContainer.nativeElement.addEventListener('mousewheel', preventDefault, { passive: false });\n            this._table.tableContainer.nativeElement.addEventListener('touchmove', preventDefault, { passive: false });\n        }\n        this._table.tableContainer.nativeElement.addEventListener('keydown', preventDefaultForScrollKeys, false);\n    }\n\n    /** @hidden */\n    private _enableScrolling(): void {\n        this._table._focusableGrid._preventKeydown = false;\n        if (!this._table._virtualScrollDirective?.scrollWholeRows) {\n            this._table.tableContainer.nativeElement.removeEventListener('DOMMouseScroll', preventDefault, false);\n            this._table.tableContainer.nativeElement.removeEventListener('wheel', preventDefault);\n            this._table.tableContainer.nativeElement.removeEventListener('mousewheel', preventDefault);\n            this._table.tableContainer.nativeElement.removeEventListener('touchmove', preventDefault);\n        }\n        this._table.tableContainer.nativeElement.removeEventListener('keydown', preventDefaultForScrollKeys, false);\n    }\n}\n\nfunction preventDefault(event: Event): void {\n    event.preventDefault();\n}\n\nfunction preventDefaultForScrollKeys(event: KeyboardEvent): boolean | undefined {\n    if (\n        !event.altKey &&\n        KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, SPACE, PAGE_DOWN, PAGE_UP, END, HOME])\n    ) {\n        preventDefault(event);\n        return false;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { FocusableItemPosition } from '@fundamental-ngx/cdk/utils';\nimport { Observable, Subject } from 'rxjs';\nimport { convertTreeLikeToFlatList, createGroupedTableRowsTree, sortTreeLikeGroupedRows } from '../helpers';\nimport { CollectionGroup } from '../interfaces';\nimport { TableRow } from '../models';\nimport { TableCellActivateEvent } from '../models/table-cell-activate-event.model';\nimport { EditableTableCell } from '../table-cell.class';\n\nexport type ToggleRowModel =\n    | {\n          type: 'toggleRow';\n          row: TableRow;\n      }\n    | {\n          type: 'toggleSingleSelectableRow';\n          row: TableRow;\n      }\n    | {\n          type: 'toggleMultiSelectRow';\n          row: TableRow;\n          event?: Event;\n      };\n\nexport interface CellClickedModel {\n    index: number;\n    row: TableRow;\n}\n\n@Injectable()\nexport class TableRowService<T = any> {\n    /** Stream that emits when toggling all selectable rows is needed. */\n    readonly toggleAllSelectableRows$: Observable<boolean>;\n\n    /** Stream that emits when table cell being clicked. */\n    readonly cellClicked$: Observable<CellClickedModel>;\n\n    /** Stream that emits when scrolling to overlapped cell is needed. */\n    readonly scrollToOverlappedCell$: Observable<void>;\n\n    /** Stream that emits when the table cell being focused. */\n    readonly cellFocused$: Observable<FocusableItemPosition>;\n\n    /** Stream that emits when the table cell being focused. */\n    readonly cellActivate$: Observable<TableCellActivateEvent<any>>;\n\n    /** Toggle row stream. */\n    readonly toggleRow$: Observable<ToggleRowModel>;\n\n    /** Editable cells map. */\n    readonly editableCells = new Map<TableRow<any>, EditableTableCell[]>();\n\n    /** @hidden */\n    readonly childRowsAdded$ = new Subject<{ row: TableRow; rowIndex: number; items: T[] }>();\n\n    /** Stream to load child items for a particular rows. */\n    readonly loadChildRows$ = new Subject<TableRow<T>[]>();\n\n    /** @hidden */\n    private readonly _toggleRowSubject = new Subject<ToggleRowModel>();\n\n    /** @hidden */\n    private readonly _scrollToOverlappedCellSubject = new Subject<void>();\n\n    /** @hidden */\n    private readonly _cellClickedSubject = new Subject<CellClickedModel>();\n\n    /** @hidden */\n    private readonly _cellActivateSubject = new Subject<TableCellActivateEvent<any>>();\n\n    /** @hidden */\n    private readonly _cellFocusedSubject = new Subject<FocusableItemPosition>();\n\n    /** @hidden */\n    private readonly _toggleAllSelectableRowsSubject = new Subject<boolean>();\n\n    /** @hidden */\n    constructor() {\n        this.toggleAllSelectableRows$ = this._toggleAllSelectableRowsSubject.asObservable();\n        this.cellClicked$ = this._cellClickedSubject.asObservable();\n        this.scrollToOverlappedCell$ = this._scrollToOverlappedCellSubject.asObservable();\n        this.cellFocused$ = this._cellFocusedSubject.asObservable();\n        this.cellActivate$ = this._cellActivateSubject.asObservable();\n        this.toggleRow$ = this._toggleRowSubject.asObservable();\n    }\n\n    /** `toggleRow$` stream trigger. */\n    toggleRow(evt: ToggleRowModel): void {\n        this._toggleRowSubject.next(evt);\n    }\n\n    /** `scrollToOverlappedCell$` stream trigger. */\n    scrollToOverlappedCell(): void {\n        this._scrollToOverlappedCellSubject.next();\n    }\n\n    /** `cellClicked$` stream trigger. */\n    cellClicked(evt: CellClickedModel): void {\n        this._cellClickedSubject.next(evt);\n    }\n\n    /** @hidden */\n    cellActivate(columnIndex: number, row: TableRow): void {\n        this._cellActivateSubject.next({ columnIndex, row: row.value });\n    }\n\n    /** `cellFocused$` stream trigger. */\n    cellFocused(evt: FocusableItemPosition): void {\n        this._cellFocusedSubject.next(evt);\n    }\n\n    /** `toggleAllSelectableRows$` stream trigger. */\n    toggleAllSelectableRows(selectAll: boolean): void {\n        this._toggleAllSelectableRowsSubject.next(selectAll);\n    }\n\n    /** Groups the table rows. */\n    groupTableRows(\n        sourceRows: TableRow[],\n        groups: Iterable<CollectionGroup>,\n        groupRulesMap: Map<string, CollectionGroup>\n    ): TableRow[] {\n        const groupRules = Array.from(groups);\n\n        if (!groupRules.length) {\n            /**\n             * In case if previously we had groups with collapsed items\n             * but now we don't have it we need to reset row.hidden flag\n             * in order to avoid empty table after groups settings removing\n             */\n            sourceRows.forEach((row) => {\n                row.hidden = false;\n            });\n            return sourceRows;\n        }\n\n        // Build tree like groups\n        const treeLikeGroupedRows = createGroupedTableRowsTree(groupRules, sourceRows);\n\n        // Sort tree like groups\n        const sortedTreeLikeGroupedRows = sortTreeLikeGroupedRows(treeLikeGroupedRows, groupRulesMap);\n\n        // Convert tree like list to a flat list\n        return convertTreeLikeToFlatList(sortedTreeLikeGroupedRows);\n    }\n\n    /** Sets editable cells for particular row. */\n    updateEditableCells(row: TableRow, cells: EditableTableCell[]): void {\n        this.editableCells.set(row, cells);\n    }\n\n    /** Removes editable cells of particular row. */\n    removeEditableCells(row: TableRow): void {\n        this.editableCells.delete(row);\n    }\n\n    /** Triggers stream to load child items for a particular rows. */\n    loadChildRows(rows: TableRow<T> | TableRow<T>[]): void {\n        const expandableRows: TableRow<T>[] = [];\n        if (Array.isArray(rows)) {\n            expandableRows.push(...rows.filter((r) => !r.childItemsLoading$.value));\n        } else {\n            if (rows.childItemsLoading$.value) {\n                return;\n            }\n            expandableRows.push(rows);\n        }\n        this.loadChildRows$.next(expandableRows);\n    }\n}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\n\nimport { DOCUMENT, DestroyRef, Directive, ElementRef, NgZone, OnInit, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    FocusableCellPosition,\n    FocusableItemPosition,\n    KeyUtil,\n    Nullable,\n    RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { fromEvent } from 'rxjs';\nimport { TableColumnResizeService } from '../services/table-column-resize.service';\nimport { TableRowService } from '../services/table-row.service';\n\n@Directive({\n    selector: '[fdpTableHeaderResizer]',\n    standalone: true\n})\nexport class TableHeaderResizerDirective implements OnInit {\n    /** @hidden */\n    focusedCellPosition: Nullable<FocusableCellPosition>;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    private readonly _elmRef = inject(ElementRef);\n\n    /** @hidden */\n    private readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n    /** @hidden */\n    private readonly _tableRowService = inject(TableRowService);\n\n    /** @hidden */\n    private readonly _zone = inject(NgZone);\n\n    /** @hidden */\n    private readonly _document = inject(DOCUMENT);\n\n    /** @hidden */\n    private _focusinTimerId: any;\n\n    /** @hidden */\n    private get _headerCellFocused(): boolean {\n        return this._document.activeElement?.tagName.toLowerCase() === 'th';\n    }\n    /** @hidden */\n    ngOnInit(): void {\n        this._zone.runOutsideAngular(() => {\n            fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((event) => {\n                    if (\n                        (KeyUtil.isKeyCode(event, LEFT_ARROW) ||\n                            (this._isRtl() && KeyUtil.isKeyCode(event, RIGHT_ARROW))) &&\n                        event.shiftKey &&\n                        this._headerCellFocused\n                    ) {\n                        this._tableColumnResizeService._processResize(-32);\n                        event.preventDefault();\n                        event.stopImmediatePropagation();\n                    } else if (\n                        (KeyUtil.isKeyCode(event, RIGHT_ARROW) ||\n                            (this._isRtl() && KeyUtil.isKeyCode(event, LEFT_ARROW))) &&\n                        event.shiftKey &&\n                        this._headerCellFocused\n                    ) {\n                        this._tableColumnResizeService._processResize(32);\n                        event.preventDefault();\n                        event.stopImmediatePropagation();\n                    }\n                });\n\n            fromEvent(this._elmRef.nativeElement, 'focusin')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe(() => {\n                    if (!this._focusinTimerId) {\n                        return;\n                    }\n                    clearTimeout(this._focusinTimerId);\n                    this._focusinTimerId = null;\n                });\n\n            fromEvent(this._elmRef.nativeElement, 'focusout')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe(() => {\n                    this._focusinTimerId = setTimeout(() => {\n                        this.focusedCellPosition = null;\n                    });\n                });\n        });\n\n        this._tableRowService.cellFocused$.subscribe((evt) => {\n            this._onCellFocused(evt);\n        });\n    }\n\n    /** @hidden */\n    private _onCellFocused(position: FocusableItemPosition): void {\n        this.focusedCellPosition = { rowIndex: position.rowIndex, colIndex: position.colIndex };\n    }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { FdpCellDefContext } from './table-cell.directive';\n\nexport interface FdpHeaderCellDefContext<T = any> {\n    $implicit: T;\n}\n\n/** Column header container. */\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: 'fdp-table-header', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpTableHeader {}\n\n/**\n * Header cell definition for a platform table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({ selector: '[fdpHeaderCellDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpHeaderCellDef<T = any> {\n    /** @hidden */\n    constructor(public templateRef: TemplateRef<FdpCellDefContext<T>>) {}\n\n    /** @hidden */\n    static ngTemplateContextGuard(dir: FdpHeaderCellDef, ctx: FdpHeaderCellDefContext): ctx is FdpHeaderCellDefContext {\n        return true;\n    }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { DEFAULT_TABLE_STATE, FDP_TABLE_STATE_DIRECTIVE } from '../constants';\nimport { CollectionFilter, CollectionGroup, CollectionSort, TableState } from '../interfaces';\nimport { TableInitialState } from '../models';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n    selector: `[fdpTableInitialState],\n    fdp-table`,\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_TABLE_STATE_DIRECTIVE,\n            useExisting: TableInitialStateDirective\n        }\n    ]\n})\nexport class TableInitialStateDirective extends TableInitialState {\n    /** Initial visible columns. Consist of a list of unique column names */\n    @Input()\n    initialVisibleColumns: string[];\n\n    /** Initial sort options. */\n    @Input()\n    initialSortBy: CollectionSort[] = [];\n\n    /** Initial filter options. */\n    @Input()\n    initialFilterBy: CollectionFilter[] = [];\n\n    /** Initial group options. */\n    @Input()\n    initialGroupBy: CollectionGroup[] = [];\n\n    /** Initial page. */\n    @Input()\n    initialPage = 1;\n\n    /**\n     * Initial state of table.\n     */\n    @Input()\n    set state(value: TableState) {\n        this.setTableState(value || DEFAULT_TABLE_STATE);\n    }\n\n    get state(): TableState {\n        return this.getTableState();\n    }\n\n    /** @hidden */\n    private _table: Table;\n\n    /** @hidden */\n    private readonly _tableService = inject(TableService);\n\n    /** @hidden */\n    setTable(table: Table): void {\n        this._table = table;\n    }\n\n    /** @hidden */\n    setInitialState(): void {\n        const prevState = this.getTableState();\n        const columns = this._table.getTableColumns();\n        const page = prevState.page;\n        const visibleColumns =\n            this.initialVisibleColumns ||\n            (prevState.columns.length ? prevState.columns : columns.filter((c) => c.visible).map(({ name }) => name));\n\n        const directiveInitialPage = this.initialPage ?? 1;\n\n        this._table._loadPreviousPages =\n            this._table.pageScrolling && this._table.loadPagesBefore && directiveInitialPage > 1;\n\n        const initialPage = this._table._loadPreviousPages\n            ? 1\n            : directiveInitialPage < page.currentPage\n              ? page.currentPage\n              : directiveInitialPage;\n\n        const initialPageSize =\n            (this._table._loadPreviousPages ? directiveInitialPage : initialPage) *\n            (this._table.pageSize || page.pageSize);\n\n        this.setTableState({\n            ...prevState,\n            columns: visibleColumns,\n            columnKeys: columns.filter((c) => visibleColumns.includes(c.name)).map((c) => c.key),\n            sortBy: this.initialSortBy || prevState.sortBy,\n            filterBy: this.initialFilterBy || prevState.filterBy,\n            groupBy: this.initialGroupBy || prevState.groupBy,\n            freezeToColumn: this._table.freezeColumnsTo || prevState.freezeToColumn,\n            freezeToEndColumn: this._table.freezeEndColumnsTo || prevState.freezeToEndColumn,\n            page: {\n                currentPage: initialPage,\n                pageSize: initialPageSize\n            }\n        });\n    }\n\n    /** Get current state/settings of the Table. */\n    getTableState(): TableState {\n        return this._tableService.getTableState();\n    }\n\n    /** Set current state/settings of the Table. */\n    setTableState(state: TableState): void {\n        this._tableService.setTableState(state);\n    }\n}\n","import {\n    DestroyRef,\n    Directive,\n    DOCUMENT,\n    ElementRef,\n    forwardRef,\n    inject,\n    NgZone,\n    OnDestroy,\n    OnInit\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable, Observer } from 'rxjs';\nimport { filter, share, tap } from 'rxjs/operators';\nimport {\n    TABLE_SCROLLABLE,\n    TableScrollable,\n    TableScrollDispatcherService\n} from '../services/table-scroll-dispatcher.service';\n\n/**\n * Table Scrollable.\n * That directive should be assigned to table scrollable area.\n * It registers itself in table scroll dispatcher\n * and notify once element scrolled.\n *\n * For internal usage.\n */\n@Directive({\n    selector: '[fdpTableScrollable]',\n    exportAs: 'tableScrollable',\n    standalone: true,\n    providers: [{ provide: TABLE_SCROLLABLE, useExisting: forwardRef(() => TableScrollableDirective) }]\n})\nexport class TableScrollableDirective implements TableScrollable, OnInit, OnDestroy {\n    /** @hidden */\n    private _skipEvent = false;\n\n    /** @hidden */\n    private _prevScrollTop = 0;\n\n    /** @hidden */\n    private _prevScrollLeft = 0;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _document = inject(DOCUMENT);\n\n    /** Scroll events stream */\n    private _elementScrollStream: Observable<Event> = new Observable((observer: Observer<Event>) => {\n        const subscription = this.ngZone.runOutsideAngular(() =>\n            fromEvent(this.elementRef.nativeElement, 'scroll').subscribe(observer)\n        );\n        return () => subscription.unsubscribe();\n    }).pipe(\n        filter(() => {\n            if (this._skipEvent) {\n                this._skipEvent = false;\n                return false;\n            }\n            return true;\n        }),\n        takeUntilDestroyed(this._destroyRef),\n        share()\n    );\n\n    /** Vertical scroll stream */\n    private _elementVerticalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n        filter(() => this._prevScrollTop !== this.getScrollTop()),\n        tap(() => (this._prevScrollTop = this.getScrollTop()))\n    );\n\n    /** Horizontal scroll stream */\n    private _elementHorizontalScrollStream: Observable<Event> = this._elementScrollStream.pipe(\n        filter(() => this._prevScrollLeft !== this.getScrollLeft()),\n        tap(() => (this._prevScrollLeft = this.getScrollLeft()))\n    );\n\n    /** @hidden */\n    constructor(\n        public elementRef: ElementRef<HTMLElement>,\n        protected scrollDispatcher: TableScrollDispatcherService,\n        protected ngZone: NgZone\n    ) {}\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.scrollDispatcher.register(this);\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this.scrollDispatcher.deregister(this);\n    }\n\n    /** Returns observable that emits when a scroll event is fired on the host element. */\n    getScrollStream(): Observable<Event> {\n        return this._elementScrollStream;\n    }\n\n    /** Returns observable that emits when a vertical scroll event is happened on the host element. */\n    getVerticalScrollStream(): Observable<Event> {\n        return this._elementVerticalScrollStream;\n    }\n\n    /** Returns observable that emits when a horizontal scroll event is happened on the host element. */\n    getHorizontalScrollStream(): Observable<Event> {\n        return this._elementHorizontalScrollStream;\n    }\n\n    /** Returns scrollTop position of the host element. */\n    getScrollTop(): number {\n        return this.elementRef.nativeElement?.scrollTop;\n    }\n\n    /** Returns scrollLeft position of the host element. */\n    getScrollLeft(): number {\n        return this.elementRef.nativeElement?.scrollLeft;\n    }\n\n    /** Set scrollTop position of the host element. */\n    setScrollTop(scrollTop: number, emitEvent = true): void {\n        if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollTop === scrollTop) {\n            return;\n        }\n        this._skipEvent = !emitEvent;\n        this.elementRef.nativeElement.scrollTop = scrollTop;\n    }\n\n    /** Set scrollLeft position of the host element. */\n    setScrollLeft(scrollLeft: number, emitEvent = true): void {\n        if (!this.elementRef.nativeElement || this.elementRef.nativeElement.scrollLeft === scrollLeft) {\n            return;\n        }\n        this._skipEvent = !emitEvent;\n        this.elementRef.nativeElement.scrollLeft = scrollLeft;\n    }\n\n    /** Scrolls to overlapped cell. */\n    scrollToOverlappedCell(rtl: boolean, freezableColumnsSize: number, freezableEndColumnSize: number): void {\n        const tableScrollableEl = this.elementRef.nativeElement;\n        const isRtl = rtl;\n\n        if (\n            (freezableColumnsSize || freezableEndColumnSize) &&\n            tableScrollableEl.scrollWidth > tableScrollableEl.clientWidth\n        ) {\n            const activeEl = this._document.activeElement;\n            if (\n                activeEl &&\n                !(\n                    activeEl.classList.contains('fd-table__cell--fixed') ||\n                    activeEl.classList.contains('fd-table__cell--fixed-end')\n                )\n            ) {\n                if (freezableColumnsSize && !freezableEndColumnSize) {\n                    activeEl.scrollIntoView({ block: 'nearest', inline: 'end' });\n                } else if (!freezableColumnsSize && freezableEndColumnSize) {\n                    activeEl.scrollIntoView({ block: 'nearest', inline: 'center' });\n                } else if (freezableColumnsSize && freezableEndColumnSize) {\n                    // check to see if another element obstructs the active element\n                    const activeElmRect = activeEl.getBoundingClientRect();\n                    const activeElLeft = activeElmRect.left;\n                    const activeElTop = activeElmRect.top;\n                    const activeElWidth = activeElmRect.width;\n                    const topElementFromLeft = this._document.elementFromPoint(activeElLeft, activeElTop);\n                    // if the activeEl is overlapped\n                    if (\n                        topElementFromLeft &&\n                        !activeEl.isSameNode(topElementFromLeft) &&\n                        topElementFromLeft.classList.contains('fd-table__cell--fixed-end')\n                    ) {\n                        const topElementX = topElementFromLeft.getBoundingClientRect().left;\n                        const leftVal = isRtl\n                            ? (activeElLeft + activeElWidth - topElementX) * -1\n                            : activeElLeft + activeElWidth - topElementX;\n                        tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n                    } else if (\n                        topElementFromLeft &&\n                        !activeEl.isSameNode(topElementFromLeft) &&\n                        topElementFromLeft.classList.contains('fd-table__cell--fixed')\n                    ) {\n                        const topElementX = topElementFromLeft.getBoundingClientRect().right;\n                        const leftVal = isRtl\n                            ? (activeElLeft - activeElWidth - topElementX) * -1\n                            : activeElLeft - activeElWidth - topElementX;\n                        tableScrollableEl.scrollBy({ top: 0, left: leftVal });\n                    }\n                }\n            }\n        }\n    }\n\n    /** Set Scroll Position during component initialization. */\n    initializeScrollTop(scrollTop: number): void {\n        this.ngZone.runOutsideAngular(() => {\n            setTimeout(() => {\n                this.setScrollTop(scrollTop, false);\n            });\n        });\n    }\n}\n","import { Directive, EventEmitter, TemplateRef } from '@angular/core';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\n\nexport interface FdpViewSettingsFilterCustomDefContext {\n    $implicit: any;\n    valueChangeEmitter: EventEmitter<unknown>;\n    contentDensity: ContentDensityMode;\n}\n\n@Directive({ selector: '[fdpViewSettingsFilterCustomDef]', standalone: true })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class FdpViewSettingsFilterCustomDef {\n    /** @hidden */\n    constructor(public templateRef: TemplateRef<FdpViewSettingsFilterCustomDefContext>) {}\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        dir: FdpViewSettingsFilterCustomDef,\n        ctx: FdpViewSettingsFilterCustomDefContext\n    ): ctx is FdpViewSettingsFilterCustomDefContext {\n        return true;\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { DestroyRef, Directive, inject, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FocusableItemPosition, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { BehaviorSubject, filter, Subscription } from 'rxjs';\nimport { FDP_TABLE_DRAGGABLE_DIRECTIVE, FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE, ROW_HEIGHT } from '../constants';\nimport { TableDraggable, TableVirtualScroll } from '../models';\nimport { TableRowService } from '../services/table-row.service';\nimport { TableScrollDispatcherService } from '../services/table-scroll-dispatcher.service';\nimport { TableService } from '../services/table.service';\nimport { Table } from '../table';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'fdp-table[virtualScroll]',\n    standalone: true,\n    providers: [\n        {\n            provide: FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n            useExisting: TableVirtualScrollDirective\n        }\n    ],\n    host: {\n        '(keydown)': '_keydownHandler($event)'\n    }\n})\nexport class TableVirtualScrollDirective extends TableVirtualScroll implements OnChanges, OnDestroy {\n    /** Whether to show only visible rows in matter of performance\n     * false by default, when true setting bodyHeight and rowHeight is required.\n     */\n    @Input()\n    virtualScroll = false;\n\n    /** Cache size for the virtualScroll, default is 40 in each direction */\n    @Input()\n    renderAhead = 40;\n\n    /** Body height. */\n    @Input()\n    bodyHeight: string;\n\n    /**\n     * Minimum height of the row, required for the virtualScroll,\n     * default is 44px in cozy, 32px in compact and 24px in condensed (set automatically)\n     */\n    @Input()\n    rowHeight = ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n\n    /**\n     * Minimum height of the popping column when displayed in pop-in mode. Required when using popping columns and virtual scroll.\n     */\n    @Input()\n    secondaryRowHeight: number | undefined;\n\n    /**\n     * Whether to scroll whole rows rather than pixel by pixel when the user performs a scroll.\n     * This gives greater performance improvements but also lends to some potentially undesirable UX changes.\n     * A \"rowHeight\" must be provided when using this feature.\n     */\n    @Input()\n    set scrollWholeRows(value: boolean) {\n        this._scrollWholeRows = coerceBooleanProperty(value);\n        if (this._scrollWholeRows) {\n            this.virtualScroll = true;\n        }\n    }\n\n    get scrollWholeRows(): boolean {\n        return this._scrollWholeRows;\n    }\n\n    /** @hidden */\n    virtualScrollTotalHeight = 0;\n\n    /** @hidden */\n    virtualScrollTransform$ = new BehaviorSubject<number>(0);\n\n    /** @hidden */\n    private _table: Table;\n\n    /** @hidden */\n    private _virtualScrollCache = { startNodeIndex: -1, visibleNodeCount: -1, totalNodeCount: -1 };\n\n    /** @hidden */\n    private readonly _tableScrollDispatcher = inject(TableScrollDispatcherService);\n\n    /** @hidden */\n    private readonly _tableRowService = inject(TableRowService);\n\n    /** @hidden */\n    private readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private _wheelTimeout: number | undefined;\n\n    /** @hidden */\n    private _scrollMockTimeout: number | undefined;\n\n    /** @hidden */\n    private _lastMockScrollPosition = 0;\n\n    /** @hidden */\n    private _focusableGridSubscription: Subscription;\n\n    /** @hidden */\n    private _focusedCell: FocusableItemPosition;\n\n    /** @hidden */\n    private _previousStartNodeIndex: number | null = null;\n\n    /** @hidden */\n    private _scrollWholeRows = false;\n\n    /** @hidden */\n    constructor(readonly _tableService: TableService) {\n        super();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (!this._table.tableScrollable) {\n            return;\n        }\n        if (this.virtualScroll && (changes['rowHeight'] || changes['virtualScroll'] || changes['renderAhead'])) {\n            this.calculateVirtualScrollRows();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._focusableGridSubscription?.unsubscribe();\n        if (this.scrollWholeRows) {\n            this._table.tableContainer.nativeElement.removeEventListener('wheel', this._wheelScrollListenerFunction, {\n                passive: false\n            });\n            this._table.tableScrollMockContainer.nativeElement.removeEventListener(\n                'scroll',\n                this._mockScrollbarListenerFunction,\n                { passive: false }\n            );\n        }\n    }\n\n    /** Sets table reference. */\n    setTable(table: Table): void {\n        this._table = table;\n    }\n\n    /**\n     * Calculates rows to be rendered in the table.\n     */\n    calculateVirtualScrollRows(): void {\n        if (this.scrollWholeRows) {\n            if (!this._focusableGridSubscription) {\n                this._focusableGridSubscription = this._table._focusableGrid.itemFocused.subscribe((event) => {\n                    // need to put this in a setTimeout so it happens after the _keydownHandler is executed\n                    setTimeout(() => {\n                        this._focusedCell = event;\n                    });\n                });\n            }\n            if (!this.virtualScroll || !this.bodyHeight) {\n                return;\n            }\n\n            let startNodeIndex = 0;\n            const scrollTop = this._table.getTableState().scrollTopPosition;\n            if (scrollTop !== 0) {\n                startNodeIndex = Math.floor(scrollTop / this.rowHeight);\n                if (startNodeIndex > this._table._tableRowsVisible.length) {\n                    startNodeIndex = 0;\n                }\n            }\n\n            const totalNodeCount = this._table._tableRowsVisible.length;\n            let visibleNodeCount = this._getNumberOfRowsToDisplay();\n            visibleNodeCount = Math.min(totalNodeCount - startNodeIndex, visibleNodeCount);\n            this.virtualScrollTotalHeight = totalNodeCount * this.rowHeight - visibleNodeCount * this.rowHeight;\n\n            this._setRows(startNodeIndex);\n            const scrollMockContainer = this._table.tableScrollMockContainer.nativeElement;\n            scrollMockContainer.style.maxHeight = this.bodyHeight;\n        } else {\n            if (!this.virtualScroll || !this.bodyHeight || this._dndTableDirective?.dragDropInProgress) {\n                return;\n            }\n\n            let rowHeight = this.rowHeight + 1;\n\n            const tableContainerEl = this._table.tableContainer.nativeElement;\n\n            if (this._tableService.poppingColumns$().length > 0) {\n                const secondaryRows = tableContainerEl.getElementsByClassName('fd-table__row--secondary');\n                if (secondaryRows[0]) {\n                    rowHeight = rowHeight + secondaryRows[0].clientHeight;\n                }\n            }\n\n            const rowsVisible = this._table._tableRowsVisible;\n            const currentlyRenderedRows = this._table.getCurrentlyRenderedRows();\n            const totalNodeCount = rowsVisible.length;\n            const scrollTop = this._table.tableScrollable.getScrollTop();\n\n            let startNodeIndex = Math.floor(scrollTop / rowHeight) - this.renderAhead;\n            startNodeIndex = Math.max(0, startNodeIndex);\n\n            let visibleNodeCount = Math.ceil(tableContainerEl.clientHeight / rowHeight) + 2 * this.renderAhead;\n            visibleNodeCount = Math.min(totalNodeCount - startNodeIndex, visibleNodeCount);\n\n            this.virtualScrollTransform$.next(startNodeIndex * rowHeight);\n\n            // Simple caching to avoid unnecessary re-renderings\n            const isCached =\n                startNodeIndex === this._virtualScrollCache.startNodeIndex &&\n                visibleNodeCount === this._virtualScrollCache.visibleNodeCount &&\n                totalNodeCount === this._virtualScrollCache.totalNodeCount &&\n                // On rows change, even if the total number of rows is the same, the row object will be different\n                startNodeIndex === currentlyRenderedRows[0];\n\n            if (isCached) {\n                return;\n            }\n\n            this._virtualScrollCache = { startNodeIndex, visibleNodeCount, totalNodeCount };\n            this.virtualScrollTotalHeight = totalNodeCount * rowHeight - visibleNodeCount * rowHeight;\n            this._table.setCurrentlyRenderedRows(\n                startNodeIndex,\n                rowsVisible.slice(startNodeIndex, startNodeIndex + visibleNodeCount).length\n            );\n        }\n    }\n\n    /**\n     * Initialises scroll listener.\n     */\n    listenOnVirtualScroll(): void {\n        if (this.scrollWholeRows) {\n            this._table.tableContainer.nativeElement.addEventListener('wheel', this._wheelScrollListenerFunction, {\n                passive: false\n            });\n            this._table.tableScrollMockContainer.nativeElement.addEventListener(\n                'scroll',\n                this._mockScrollbarListenerFunction,\n                { passive: false }\n            );\n        } else {\n            this._tableScrollDispatcher\n                .verticallyScrolled()\n                .pipe(\n                    filter(() => this.virtualScroll && !!this.bodyHeight),\n                    takeUntilDestroyed(this._destroyRef)\n                )\n                .subscribe((scrollable) => {\n                    this.calculateVirtualScrollRows();\n                    this._tableService.setTableState({\n                        ...this._table.getTableState(),\n                        scrollTopPosition: scrollable.getScrollTop()\n                    });\n                });\n        }\n    }\n\n    /** @hidden */\n    _keydownHandler(event: KeyboardEvent): void {\n        if (this.scrollWholeRows) {\n            if (this._focusedCell?.rowIndex === 1 && KeyUtil.isKeyCode(event, UP_ARROW)) {\n                if (this._table.tableContainer.nativeElement.querySelectorAll('tr')[1].ariaRowIndex !== '1') {\n                    const cellToFocus = {\n                        colIndex: this._focusedCell.colIndex,\n                        rowIndex: 1\n                    };\n                    this._table._focusableGrid.focusCell(cellToFocus);\n                }\n                this._scrollRow(-1);\n            } else if (\n                this._focusedCell?.rowIndex === this._getNumberOfRowsToDisplay() &&\n                KeyUtil.isKeyCode(event, DOWN_ARROW)\n            ) {\n                this._scrollRow(1);\n            }\n        }\n    }\n\n    /** @hidden */\n    private _getNumberOfRowsToDisplay(): number {\n        const tableContainer = this._table.tableContainer.nativeElement;\n        let tableHeight = tableContainer.clientHeight;\n        tableHeight = tableHeight - tableContainer.querySelector('thead').clientHeight;\n        const numberOfRows = Math.floor(tableHeight / this.rowHeight);\n        if (this._table._tableRowsVisible.length < numberOfRows) {\n            return this._table._tableRowsVisible.length;\n        } else {\n            return numberOfRows;\n        }\n    }\n\n    /**\n     * @hidden\n     * This function is called when the user performs a wheel event. It determines whether or not the user has scrolled\n     * up or down using the event's deltaX property, and scrolls the table by one row.\n     */\n    private _wheelScrollListenerFunction = (event: WheelEvent): void => {\n        if (Math.abs(event.deltaX) < Math.abs(event.deltaY)) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            if (this._wheelTimeout) {\n                window.cancelAnimationFrame(this._wheelTimeout);\n            }\n            const deltaY = event.deltaY;\n            if (deltaY) {\n                this._wheelTimeout = window.requestAnimationFrame(() => {\n                    this._scrollRow(deltaY > 0 ? 1 : -1);\n                });\n            }\n        }\n    };\n\n    /**\n     * @hidden\n     * This function is called when the mock scrollbar (when using 'scrollWholeRows') is moved. It determines if the\n     * scroll was up or down by comparing the current scroll top to the previous scroll top and scrolls rows accordingly.\n     */\n    private _mockScrollbarListenerFunction = (event: Event): void => {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        if (this._scrollMockTimeout) {\n            window.cancelAnimationFrame(this._scrollMockTimeout);\n        }\n        const tableScrollMockContainer = this._table.tableScrollMockContainer.nativeElement;\n        let deltaY = tableScrollMockContainer.scrollTop - this._lastMockScrollPosition;\n        deltaY = Math.ceil(deltaY / this.rowHeight);\n        this._scrollMockTimeout = window.requestAnimationFrame(() => {\n            this._scrollRow(deltaY, true);\n            this._lastMockScrollPosition = tableScrollMockContainer.scrollTop;\n            if (tableScrollMockContainer.scrollTop === 0) {\n                // Always display the first row of the table when the user scrolls all the way to the top\n                this._setRows(0);\n            }\n            if (\n                tableScrollMockContainer.scrollTop + tableScrollMockContainer.getBoundingClientRect().height ===\n                tableScrollMockContainer.scrollHeight\n            ) {\n                // Always display the last rows of the table when the user scrolls all the way to the bottom\n                const startingNodeIndex = this._table._tableRowsVisible.length - this._getNumberOfRowsToDisplay();\n                this._setRows(startingNodeIndex);\n            }\n        });\n    };\n\n    /**\n     * @hidden\n     * This function, used only when 'scrollWholeRows' is truthy, calculates what should be the new starting node, based\n     * off the previous starting node and the provided 'count' parameter. For example if the previous start node was 10\n     * and the count parameter is -2, the new starting node will be 8. This function also programmatically moves the\n     * mock scrollbar.\n     */\n    private _scrollRow(count: number, fromMockScrollbarListener = false): void {\n        let startingNode = 0;\n        if (this._previousStartNodeIndex !== null && this._previousStartNodeIndex >= 0) {\n            startingNode = this._previousStartNodeIndex;\n        }\n        if (\n            startingNode + count + this._getNumberOfRowsToDisplay() <= this._table._tableRowsVisible.length ||\n            count < 0\n        ) {\n            startingNode = Math.ceil(startingNode + count);\n        }\n        if (startingNode < 0) {\n            startingNode = 0;\n        }\n        if (count > 0 && startingNode === this._previousStartNodeIndex && this._table.pageScrolling) {\n            this._table._onSpyIntersect(true);\n        }\n        this._setRows(startingNode);\n        const tableScrollMockContainer = this._table.tableScrollMockContainer.nativeElement;\n        if (!fromMockScrollbarListener) {\n            tableScrollMockContainer.scrollBy({ top: count * this.rowHeight });\n        }\n        this._lastMockScrollPosition = tableScrollMockContainer.scrollTop;\n        if (this._table.pageScrolling) {\n            this._table.tableScrolled.emit(this._lastMockScrollPosition);\n        }\n    }\n\n    /**\n     * @hidden\n     * This function sets rows in the table's viewport depending on the provided starting node. It also sets the table\n     * state scrollTopPosition.\n     */\n    private _setRows(startingNode: number): void {\n        this._table.setCurrentlyRenderedRows(startingNode, this._getNumberOfRowsToDisplay());\n        this._previousStartNodeIndex = startingNode;\n        this._tableService.getTableState().scrollTopPosition = this.rowHeight * startingNode;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ColumnAlign } from '../enums/column-align.enum';\nimport { TableColumn } from '../table-column';\n\n@Pipe({ name: 'tableCellStyles', standalone: true })\nexport class TableCellStylesPipe implements PipeTransform {\n    /** @hidden */\n    transform(\n        column: TableColumn,\n        isRtl: boolean,\n        semanticHighlightingColumnWidth: number | null,\n        selectionColumnWidth: number | null,\n        isFrozenColumn: boolean,\n        isFrozenEndColumn: boolean,\n        prevColumnWidthPx: number | null,\n        columnWidth: string,\n        nextColumnWidthPx: number | null,\n        noBorders?: boolean,\n        noHorizontalBorders?: boolean,\n        noVerticalBorders?: boolean\n    ): Record<string, number | string> {\n        const styles: { [property: string]: number | string } = {};\n\n        if (isFrozenColumn) {\n            const key = isRtl ? 'right.px' : 'left.px';\n            styles[key] =\n                (semanticHighlightingColumnWidth || 0) + (selectionColumnWidth || 0) + (prevColumnWidthPx || 0);\n        }\n\n        if (isFrozenEndColumn) {\n            const key = isRtl ? 'left.px' : 'right.px';\n            styles[key] = (nextColumnWidthPx || 0).toString();\n        }\n\n        if (noHorizontalBorders) {\n            styles['border-top'] = 'none';\n            styles['border-bottom'] = 'none';\n        }\n\n        if (noVerticalBorders) {\n            styles['border-left'] = 'none';\n            styles['border-right'] = 'none';\n        }\n\n        if (noBorders) {\n            styles['border'] = 'none';\n        } else {\n            styles['min-width'] = columnWidth;\n            styles['max-width'] = columnWidth;\n            styles['width'] = columnWidth;\n        }\n\n        // The \"start\" value does align left when you are using a LTR browser.\n        // In RTL browsers, the \"start\" value aligns right.\n        // Since we want to dynamically apply alignment only depending on the service value, we are using \"left\"/\"right\" as values instead\n        switch (column.align) {\n            case ColumnAlign.START:\n                styles['text-align'] = isRtl ? 'right' : 'left';\n                break;\n            case ColumnAlign.END:\n                styles['text-align'] = isRtl ? 'left' : 'right';\n                break;\n            default:\n                styles['text-align'] = 'center';\n                break;\n        }\n\n        return styles;\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TableColumnResizableSide } from '../directives/table-cell-resizable.directive';\n\n@Pipe({ name: 'columnResizableSide', standalone: true })\nexport class ColumnResizableSidePipe implements PipeTransform {\n    /** @hidden */\n    transform(\n        columnIndex: number,\n        visibleColumnsLength: number,\n        navigationColumnShown: boolean | null\n    ): TableColumnResizableSide {\n        if (columnIndex === 0) {\n            return 'end';\n        }\n\n        const isLastColumn = columnIndex === visibleColumnsLength - 1;\n\n        if (isLastColumn && navigationColumnShown) {\n            return 'start';\n        }\n\n        return 'both';\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { SortDirection } from '../enums';\nimport { CollectionSort } from '../interfaces';\n\nexport const ARIA_SORT: Record<`${SortDirection}`, string> = {\n    none: 'none',\n    asc: 'ascending',\n    desc: 'descending'\n};\n\n@Pipe({\n    pure: true,\n    standalone: true,\n    name: 'fdpTableColumnSortingDirection'\n})\nexport class TableColumnSortingDirectionPipe implements PipeTransform {\n    /** @hidden */\n    transform(sorting: Nullable<CollectionSort>): string {\n        if (!sorting) {\n            return 'none';\n        }\n\n        return ARIA_SORT[sorting.direction];\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isFunction, isString } from '@fundamental-ngx/platform/shared';\nimport { TableRowType } from '../enums/row-type.enum';\nimport { TableRow, TableRowClass } from '../models';\n\n@Pipe({ name: 'rowClasses', standalone: true })\nexport class RowClassesPipe implements PipeTransform {\n    /** @hidden */\n    transform(row: TableRow, rowsClass: TableRowClass): string {\n        const treeRowClass = row.type === TableRowType.TREE ? 'fdp-table__row--tree' : '';\n        const rowClasses = this._getRowCustomCssClasses(row, rowsClass);\n\n        return rowClasses.concat(' ', treeRowClass).trim();\n    }\n\n    /** @hidden */\n    private _getRowCustomCssClasses(row: TableRow, rowsClass: TableRowClass): string {\n        if (!rowsClass) {\n            return '';\n        }\n\n        let rowClasses = '';\n\n        if (isString(rowsClass)) {\n            rowClasses = rowsClass;\n        }\n\n        if (isFunction(rowsClass)) {\n            rowClasses = (rowsClass as any)(row.value) || '';\n        }\n\n        return rowClasses.trim();\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode } from '@fundamental-ngx/core/content-density';\nimport { SELECTION_COLUMN_WIDTH } from '../constants';\n\n@Pipe({ name: 'selectionCellStyles', standalone: true })\nexport class SelectionCellStylesPipe implements PipeTransform {\n    /** @hidden */\n    transform(\n        contentDensity: Nullable<ContentDensityMode>,\n        rtl: boolean,\n        semanticHighlightingColumnWidth: number | null\n    ): Record<string, string> {\n        if (!contentDensity) {\n            contentDensity = ContentDensityMode.COZY;\n        }\n        const rtlKey = rtl ? 'right' : 'left';\n        const selectionColumnWidth = SELECTION_COLUMN_WIDTH.get(contentDensity) + 'px';\n\n        return {\n            [rtlKey]: (semanticHighlightingColumnWidth || 0) + 'px',\n            'min-width': selectionColumnWidth,\n            'max-width': selectionColumnWidth\n        };\n    }\n}\n","import { NgModule } from '@angular/core';\nimport {\n    FdpCellDef,\n    FdpEditableCellDef,\n    FdpEditableCellFormDirective,\n    FdpHeaderCellDef,\n    FdpTableCell,\n    FdpTableHeader,\n    FdpViewSettingsFilterCustomDef,\n    PlatformTableCellResizableDirective,\n    PlatformTableColumnResponsiveDirective,\n    TableCellHeaderPopoverDirective,\n    TableDataSourceDirective,\n    TableDraggableDirective,\n    TableHeaderResizerDirective,\n    TableInitialStateDirective,\n    TableScrollableDirective,\n    TableVirtualScrollDirective\n} from './directives';\nimport { ColumnResizableSidePipe, RowClassesPipe, SelectionCellStylesPipe, TableCellStylesPipe } from './pipes';\n\nconst importExports = [\n    TableInitialStateDirective,\n    TableDraggableDirective,\n    TableVirtualScrollDirective,\n    PlatformTableColumnResponsiveDirective,\n    FdpTableCell,\n    TableCellHeaderPopoverDirective,\n    PlatformTableCellResizableDirective,\n    TableDataSourceDirective,\n    TableDraggableDirective,\n    FdpTableHeader,\n    TableHeaderResizerDirective,\n    TableInitialStateDirective,\n    TableScrollableDirective,\n    FdpCellDef,\n    FdpEditableCellDef,\n    FdpEditableCellFormDirective,\n    FdpViewSettingsFilterCustomDef,\n    TableVirtualScrollDirective,\n    FdpHeaderCellDef,\n    SelectionCellStylesPipe,\n    TableCellStylesPipe,\n    ColumnResizableSidePipe,\n    RowClassesPipe\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [...importExports],\n    exports: [...importExports]\n})\nexport class TableHelpersModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TableService","i1.TableScrollDispatcherService","isDataSource","filter","isString"],"mappings":"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"}