{"version":3,"file":"fundamental-ngx-platform-table.mjs","sources":["../../../../libs/platform/table/components/no-data-wrapper/no-data-wrapper.component.ts","../../../../libs/platform/table/components/reset-button/reset-button.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.ts","../../../../libs/platform/table/components/table-cell-header-popover/table-cell-header-popover.component.html","../../../../libs/platform/table/components/table-column-resizer/table-column-resizer.component.ts","../../../../libs/platform/table/components/table-column/table-column.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.ts","../../../../libs/platform/table/components/table-header-cell-content/table-header-cell-content.component.html","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/columns/columns.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.model.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filter-rule.component.html","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.ts","../../../../libs/platform/table/components/table-p13-dialog/filtering/filtering.component.html","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-p13-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-columns.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-filter.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-group.component.ts","../../../../libs/platform/table/components/table-p13-dialog/table-p13-sort.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-p13-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-p13-dialog/table-p13-dialog.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar-left-actions.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.ts","../../../../libs/platform/table/components/table-toolbar/table-toolbar.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/constants.ts","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-filter.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-custom.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-single-select.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-active-step.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filter-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters-list-step.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings.model.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/filtering/filters.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/grouping/grouping.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/sorting/sorting.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.ts","../../../../libs/platform/table/components/table-view-settings-dialog/settings-dialog/settings-dialog.component.html","../../../../libs/platform/table/components/table-view-settings-dialog/table-view-settings-dialog.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.ts","../../../../libs/platform/table/components/growing-button/table-growing-button.component.html","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.ts","../../../../libs/platform/table/components/table-footer-row/table-footer-row.component.html","../../../../libs/platform/table/components/table-group-row/table-group-row.component.ts","../../../../libs/platform/table/components/table-group-row/table-group-row.component.html","../../../../libs/platform/table/components/table-header-row/table-header-row.component.ts","../../../../libs/platform/table/components/table-header-row/table-header-row.component.html","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.ts","../../../../libs/platform/table/components/table-popping-row/table-popping-row.component.html","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.ts","../../../../libs/platform/table/components/table-editable-cell/table-editable-cell.component.html","../../../../libs/platform/table/components/table-row/table-row.component.ts","../../../../libs/platform/table/components/table-row/table-row.component.html","../../../../libs/platform/table/table.component.ts","../../../../libs/platform/table/table.component.html","../../../../libs/platform/table/table.module.ts","../../../../libs/platform/table/fundamental-ngx-platform-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'fdp-table-no-data-wrapper',\n    template: `<ng-content></ng-content>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styles: `\n        fdp-table-no-data-wrapper {\n            display: block;\n            width: 100%;\n        }\n    `,\n    standalone: true\n})\nexport class NoDataWrapperComponent {}\n","import { ChangeDetectionStrategy, Component, Inject, InjectionToken, Signal, ViewEncapsulation } from '@angular/core';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\n\n/**\n * Reset button.\n *\n * Used to reset resettable state by click.\n *\n */\n\nexport interface Resettable {\n    reset: () => void;\n    isResetAvailable$: Signal<boolean>;\n}\n\nexport const RESETTABLE_TOKEN = new InjectionToken<Resettable>('Resettable');\n\n@Component({\n    selector: `fdp-table-reset-button`,\n    template: `<button\n        fd-button\n        fdType=\"transparent\"\n        [label]=\"('platformTable.resetChangesButtonLabel' | fdTranslate)()\"\n        (click)=\"resettable.reset()\"\n        [disabled]=\"!resettable.isResetAvailable$()\"\n    ></button>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [ButtonComponent, FdTranslatePipe]\n})\nexport class ResetButtonComponent {\n    /** @hidden */\n    constructor(@Inject(RESETTABLE_TOKEN) public resettable: Resettable) {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    DestroyRef,\n    ElementRef,\n    Input,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    inject,\n    signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent, FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { ListIconDirective, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverComponent, TriggerConfig } from '@fundamental-ngx/core/popover';\nimport { Placement, PopoverPlacement } from '@fundamental-ngx/core/shared';\nimport { TablePopoverDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FreeContentListItemComponent, ListComponent } from '@fundamental-ngx/platform/list';\nimport {\n    CollectionStringFilter,\n    ColumnAlign,\n    ColumnAlignValue,\n    FILTER_STRING_STRATEGY,\n    FilterableColumnDataType,\n    SortDirection,\n    Table,\n    TableColumn,\n    TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n    selector: 'fdp-table-cell-header-popover',\n    templateUrl: './table-cell-header-popover.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        PopoverComponent,\n        TablePopoverDirective,\n        ListComponent,\n        FreeContentListItemComponent,\n        NgTemplateOutlet,\n        TemplateDirective,\n        ListLinkDirective,\n        ListIconDirective,\n        ListTitleDirective,\n        FormItemComponent,\n        FormLabelComponent,\n        FormControlComponent,\n        FdTranslatePipe\n    ]\n})\nexport class TableCellHeaderPopoverComponent implements AfterViewInit {\n    /** Column definition. */\n    @Input()\n    column: TableColumn;\n\n    /** Custom popover template. */\n    @Input()\n    popoverTemplate: Nullable<TemplateRef<any>>;\n\n    /** Whether the popover is disabled. */\n    @Input()\n    disabled = false;\n\n    /** Whether the column is frozen. */\n    @Input()\n    columnFrozen = false;\n\n    /** Whether the filtering from header is disabled. */\n    @Input()\n    filteringFromHeaderDisabled: Nullable<boolean> = false;\n\n    /** Column index */\n    @Input()\n    columnIndex: number;\n\n    /** @hidden */\n    @ViewChild(PopoverComponent, { static: false })\n    popover: Nullable<PopoverComponent>;\n\n    /** @hidden */\n    @ViewChildren(TemplateDirective)\n    _popoverItems: QueryList<TemplateDirective>;\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    _listComponent: ListComponent<any>;\n\n    /** @hidden */\n    _popoverItems$ = signal<TemplateRef<any>[]>([]);\n\n    /** @hidden */\n    _headerPopoverTriggers: TriggerConfig[] = [\n        {\n            trigger: 'click',\n            openAction: true,\n            closeAction: true,\n            stopPropagation: true\n        },\n        {\n            trigger: 'keydown.enter',\n            openAction: true,\n            closeAction: true,\n            stopPropagation: true\n        },\n        {\n            trigger: 'keydown.space',\n            openAction: true,\n            closeAction: true,\n            stopPropagation: true\n        }\n    ];\n\n    /** @hidden */\n    protected readonly SORT_DIRECTION = SortDirection;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _tableService = inject(TableService);\n\n    /** @hidden */\n    private readonly _table = inject(Table);\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._popoverItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._popoverItems$.set(this._popoverItems.map((t) => t.templateRef));\n        });\n    }\n\n    /** @hidden */\n    mapColumnAlignToPlacement(columnAlignValue: Nullable<ColumnAlignValue>): Placement {\n        switch (columnAlignValue) {\n            case ColumnAlign.START:\n                return PopoverPlacement.BOTTOM_START;\n            case ColumnAlign.CENTER:\n                return PopoverPlacement.BOTTOM;\n            case ColumnAlign.END:\n                return PopoverPlacement.BOTTOM_END;\n            default:\n                return PopoverPlacement.AUTO;\n        }\n    }\n\n    /** @hidden */\n    _setColumnHeaderSortBy(field: TableColumn['key'], direction: SortDirection): void {\n        this._tableService.setSort([{ field, direction }]);\n        this._closePopover();\n    }\n\n    /** @hidden */\n    _setColumnHeaderGroupBy(field: TableColumn['key']): void {\n        const state = this._tableService.getTableState();\n        if (state.groupBy?.length === 1 && state.groupBy[0].field === field) {\n            // reset grouping, if already grouped by this field\n            this._tableService.setGroups([]);\n        } else {\n            this._tableService.setGroups([{ field, direction: SortDirection.NONE, showAsColumn: true }]);\n        }\n    }\n\n    /** @hidden */\n    _setColumnHeaderFilterBy(field: TableColumn['key'], value: any): void {\n        if (!value) {\n            this._tableService.removeFilters([field]);\n            return;\n        }\n        const collectionFilter: CollectionStringFilter = {\n            field,\n            value,\n            type: FilterableColumnDataType.STRING,\n            strategy: FILTER_STRING_STRATEGY.CONTAINS,\n            exclude: false\n        };\n\n        this._tableService.addFilters([collectionFilter]);\n        this._closePopover();\n    }\n\n    /** @hidden */\n    _freeze(): void {\n        this._table.freezeToColumn(this.column.name, this.column.endFreezable);\n        this._closePopover();\n    }\n\n    /** @hidden */\n    _unFreeze(): void {\n        this._table.unfreeze(this.column.name, this.column.endFreezable);\n        this._closePopover();\n    }\n\n    /** @hidden */\n    _popoverOpened(isOpen: boolean): void {\n        if (isOpen) {\n            this._listComponent?._setCurrentActiveItemIndex(0);\n        }\n    }\n\n    /** @hidden */\n    _closePopover(): void {\n        if (this.popover) {\n            this.popover.close();\n            const triggerElement = this.popover.trigger();\n            if (triggerElement) {\n                (triggerElement as ElementRef).nativeElement.focus();\n            }\n        }\n    }\n}\n","@if (!popoverTemplate) {\n    <fd-popover\n        [placement]=\"mapColumnAlignToPlacement(column?.align)\"\n        [disabled]=\"disabled\"\n        [noArrow]=\"true\"\n        fd-table-popover\n        [focusAutoCapture]=\"true\"\n        [focusTrapped]=\"true\"\n        [triggers]=\"_headerPopoverTriggers\"\n        (isOpenChange)=\"_popoverOpened($event)\"\n    >\n        <fdp-list [noBorder]=\"true\" [navigated]=\"true\" role=\"menu\">\n            @for (item of _popoverItems$(); track item) {\n                <li fdp-free-content-list-item role=\"menuitem\">\n                    <ng-template\n                        [ngTemplateOutlet]=\"item\"\n                        [ngTemplateOutletContext]=\"{ popover: popover }\"\n                    ></ng-template>\n                </li>\n            }\n        </fdp-list>\n    </fd-popover>\n} @else {\n    <ng-template\n        [ngTemplateOutlet]=\"popoverTemplate!\"\n        [ngTemplateOutletContext]=\"{ $implicit: _popoverItems$.asReadonly() }\"\n    ></ng-template>\n}\n@if (column?.sortable) {\n    <ng-template fdkTemplate=\"sortingAscPopoverItem\" let-popover=\"popover\">\n        <div\n            fd-list-link\n            role=\"button\"\n            [focusable]=\"true\"\n            (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n            (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.ASC)\"\n        >\n            <span fd-list-icon glyph=\"sort-ascending\"></span>\n            <span fd-list-title>{{ ('platformTable.headerMenuSortAsc' | fdTranslate)() }}</span>\n        </div>\n    </ng-template>\n    <ng-template fdkTemplate=\"sortingDescPopoverItem\" let-popover=\"popover\">\n        <div\n            fd-list-link\n            role=\"button\"\n            [focusable]=\"true\"\n            (click)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n            (keydown.enter)=\"_setColumnHeaderSortBy(column.key, SORT_DIRECTION.DESC)\"\n        >\n            <span fd-list-icon glyph=\"sort-descending\"></span>\n            <span fd-list-title>{{ ('platformTable.headerMenuSortDesc' | fdTranslate)() }}</span>\n        </div>\n    </ng-template>\n}\n@if (column?.groupable) {\n    <ng-template fdkTemplate=\"groupPopoverItem\" let-popover=\"popover\">\n        <div\n            fd-list-link\n            role=\"button\"\n            [focusable]=\"true\"\n            (click)=\"_setColumnHeaderGroupBy(column.key)\"\n            (keydown.enter)=\"_setColumnHeaderGroupBy(column.key)\"\n        >\n            <span fd-list-title>{{ ('platformTable.headerMenuGroup' | fdTranslate)() }}</span>\n        </div>\n    </ng-template>\n}\n@if (column?.freezable || column?.endFreezable) {\n    <ng-template fdkTemplate=\"freezePopoverItem\" let-popover=\"popover\">\n        @if (!columnFrozen) {\n            <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_freeze()\" (keydown.enter)=\"_freeze()\">\n                <span fd-list-title>{{\n                    (\n                        (!column.endFreezable\n                            ? columnIndex > 0\n                                ? 'platformTable.headerMenuFreezePlural'\n                                : 'platformTable.headerMenuFreeze'\n                            : 'platformTable.headerMenuEndFreeze'\n                        ) | fdTranslate\n                    )()\n                }}</span>\n            </div>\n        } @else {\n            <div fd-list-link role=\"button\" [focusable]=\"true\" (click)=\"_unFreeze()\" (keydown.enter)=\"_unFreeze()\">\n                <span fd-list-title>{{\n                    (\n                        (columnIndex > 0\n                            ? 'platformTable.headerMenuUnfreezePlural'\n                            : 'platformTable.headerMenuUnfreeze'\n                        ) | fdTranslate\n                    )()\n                }}</span>\n            </div>\n        }\n    </ng-template>\n}\n@if (column?.filterable && !filteringFromHeaderDisabled) {\n    <ng-template fdkTemplate=\"filteringPopoverItem\" let-popover=\"popover\">\n        <div fd-list-link [style.cursor]=\"'auto'\" [focusable]=\"true\">\n            <i fd-list-icon glyph=\"filter\"></i>\n            <div fd-form-item [horizontal]=\"true\" (click)=\"$event.stopPropagation()\">\n                <label fd-form-label [for]=\"'fdp-table-column-filtering-' + column.name\">{{\n                    ('platformTable.headerMenuFilter' | fdTranslate)()\n                }}</label>\n                <input\n                    fd-form-control\n                    [id]=\"'fdp-table-column-filtering-' + column.name\"\n                    (keydown.enter)=\"_setColumnHeaderFilterBy(column.key, $any($event.target)?.value)\"\n                    (keydown)=\"$event.stopPropagation()\"\n                />\n            </div>\n        </div>\n    </ng-template>\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    DOCUMENT,\n    ElementRef,\n    inject,\n    Inject,\n    NgZone,\n    OnInit,\n    Renderer2,\n    ViewEncapsulation\n} from '@angular/core';\nimport { TableColumnResizeService } from '@fundamental-ngx/platform/table-helpers';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\n\n/** @dynamic */\n@Component({\n    selector: `fdp-table-column-resizer`,\n    template: ` <div class=\"fdp-table__resizer-inner\"></div>`,\n    styleUrl: './table-column-resizer.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fdp-table-column-resizer'\n    },\n    standalone: true\n})\nexport class PlatformTableColumnResizerComponent implements OnInit {\n    /** @hidden */\n    private _pointerMoveListener: Subscription;\n\n    /** @hidden */\n    private _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    constructor(\n        private readonly _ngZone: NgZone,\n        private readonly _tableColumnResizeService: TableColumnResizeService,\n        private readonly _renderer: Renderer2,\n        private readonly _elmRef: ElementRef,\n        @Inject(DOCUMENT) private readonly _document: Document | null\n    ) {}\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._ngZone.runOutsideAngular(() => {\n            fromEvent<MouseEvent>(this._elmRef.nativeElement, 'mousedown')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((evt) => {\n                    if (evt.button === 0 && !evt.ctrlKey) {\n                        this._tableColumnResizeService.startResize(evt);\n\n                        this._listenForMouseUp();\n                    }\n                });\n\n            this._tableColumnResizeService.resizerPosition$\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((position) => {\n                    this._renderer.setStyle(this._elmRef.nativeElement, 'display', position > 0 ? 'block' : 'none');\n                    if (!position) {\n                        return;\n                    }\n                    this._renderer.setStyle(\n                        this._elmRef.nativeElement,\n                        'left',\n                        this._isRtl() ? 'auto' : `${position}px`\n                    );\n                    this._renderer.setStyle(\n                        this._elmRef.nativeElement,\n                        'right',\n                        !this._isRtl() ? 'auto' : `${position}px`\n                    );\n                });\n\n            this._tableColumnResizeService.resizeInProgress$\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((resizeInProgress) => {\n                    if (resizeInProgress) {\n                        this._renderer.addClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n                    } else {\n                        this._renderer.removeClass(this._elmRef.nativeElement, 'fdp-table-column-resizer--active');\n                    }\n                });\n        });\n    }\n\n    /** @hidden */\n    private _listenForMouseUp(): void {\n        this._ngZone.runOutsideAngular(() => {\n            this._pointerMoveListener?.unsubscribe();\n\n            if (!this._document) {\n                return;\n            }\n            this._pointerMoveListener = fromEvent<MouseEvent>(this._document, 'mouseup')\n                .pipe(take(1), takeUntilDestroyed(this._destroyRef))\n                .subscribe((event) => {\n                    this._tableColumnResizeService.finishResize(event);\n                    // this._cd.markForCheck();\n                });\n        });\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    Host,\n    Input,\n    OnChanges,\n    OnInit,\n    Optional,\n    SimpleChanges,\n    TemplateRef,\n    ViewEncapsulation,\n    input\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n    ColumnAlignValue,\n    FdpCellDef,\n    FdpColumnResponsiveState,\n    FdpEditableCellDef,\n    FdpHeaderCellDef,\n    FilterableColumnDataType,\n    TableCellHeaderPopoverDirective,\n    TableColumn,\n    TableColumnResizeService,\n    TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * The component that represents a table column.\n * ```html\n * <fdp-column\n *  name=\"name\"\n *  key=\"name\"\n *  label=\"Name\"\n *  align=\"start\">\n * </fdp-column>\n *\n * <fdp-column\n *  name=\"price\"\n *  key=\"price.value\">\n *  <fdp-table-header *fdpHeaderCellDef>Price</fdp-table-header>\n *  <fdp-table-cell *fdpCellDef=\"let item\">\n *   {{item.price.value}} {{item.price.currency}}\n *  </fdp-table-cell>\n * </fdp-column>\n * ```\n * */\n@Component({\n    selector: 'fdp-column',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: TableColumn, useExisting: TableColumnComponent }],\n    standalone: true\n})\nexport class TableColumnComponent extends TableColumn implements OnInit, OnChanges {\n    /** Column unique identifier. */\n    @Input()\n    name: string;\n\n    /** Column data accessor. */\n    @Input()\n    key: string;\n\n    /** Column header label. */\n    @Input()\n    set label(value: string) {\n        this.labelValueChanges$.next(value);\n    }\n\n    get label(): string {\n        return this.labelValueChanges$.value;\n    }\n\n    /** Column footer label, to be used when the footer contains only text. */\n    @Input()\n    footerLabel: string;\n\n    /** Column footer cell template, to be used when the footer cell requires more complex content than only text. */\n    @Input()\n    footerCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Cell text alignment. */\n    @Input() align: ColumnAlignValue = 'start';\n\n    /** Toggles sort feature for the column. */\n    @Input()\n    sortable = false;\n\n    /** Toggles filter feature for the column. */\n    @Input()\n    filterable = false;\n\n    /** Initial visibility state of the column. Default `true`. */\n    @Input()\n    visible = true;\n\n    /**\n     * Data type the column represents. Default is 'string'\n     * @type { 'string' | 'number' | 'date' | 'boolean' }\n     */\n    @Input()\n    dataType: FilterableColumnDataType = FilterableColumnDataType.STRING;\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    @Input()\n    filterSelectOptions: string[] = [];\n\n    /** Toggles grouping feature for the column. */\n    @Input()\n    groupable = false;\n\n    /** Toggles freeze feature for the column. */\n    @Input()\n    freezable = false;\n\n    /** Toggles freeze feature for the column. */\n    @Input()\n    endFreezable = false;\n\n    /** Whether the table cell inside table header should be non-interactive. */\n    @Input()\n    nonInteractive = false;\n\n    /** Width of the column cells. */\n    @Input()\n    set width(value: string) {\n        this._width = value;\n        this._tableColumnResizeService.setCustomWidth(this.name, value);\n    }\n    get width(): string {\n        return this._width;\n    }\n\n    /** Whether the text should wrap, when text is too long for 1 line */\n    @Input()\n    noWrap = false;\n\n    /** Whether to apply fd-table-text (text-shadow) to the cell content, if disabled noWrap has no effect. */\n    @Input()\n    applyText = true;\n\n    /** Column role attribute. */\n    @Input()\n    role: 'cell' | 'rowheader' | 'gridcell' = 'gridcell';\n\n    /** Whether to announce empty cells to screen readers. Default is true. */\n    readonly announceEmptyCell = input(true);\n\n    /** Column cell template */\n    columnCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Label change event */\n    labelValueChanges$ = new BehaviorSubject('');\n\n    /** Editable column cell template. */\n    editableColumnCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column header template */\n    headerCellTemplate: Nullable<TemplateRef<any>>;\n\n    /** Column header popover template. */\n    headerCellPopoverTemplate: Nullable<TemplateRef<any>>;\n\n    /** Stores information for the header cell if the ellipsis are visible after the column resize */\n    headerOverflows = false;\n\n    /** @hidden */\n    _freezed = false;\n\n    /** @hidden */\n    _endFreezed = false;\n\n    /** @hidden */\n    @ContentChild(FdpCellDef)\n    set fdpCellDef(fdpCellDef: Nullable<FdpCellDef>) {\n        this.columnCellTemplate = fdpCellDef?.templateRef;\n    }\n\n    /** Editable column cell template definition. */\n    @ContentChild(FdpEditableCellDef)\n    set fdpEditableCellDef(fdpEditableCellDef: Nullable<FdpEditableCellDef>) {\n        this.editableColumnCellTemplate = fdpEditableCellDef?.templateRef;\n    }\n\n    /** @hidden */\n    @ContentChild(FdpHeaderCellDef)\n    set fdpHeaderCellDef(fdpHeaderCellDef: Nullable<FdpHeaderCellDef>) {\n        this.headerCellTemplate = fdpHeaderCellDef?.templateRef;\n    }\n\n    /** @hidden */\n    @ContentChild(TableCellHeaderPopoverDirective)\n    set fdpHeaderCellPopover(popover: Nullable<TableCellHeaderPopoverDirective>) {\n        this.headerCellPopoverTemplate = popover?.templateRef;\n    }\n\n    /** Responsive state of the column. */\n    responsiveState: FdpColumnResponsiveState = 'visible';\n\n    /** @hidden */\n    private _width: string;\n\n    /** @hidden */\n    constructor(\n        private readonly _tableColumnResizeService: TableColumnResizeService,\n        @Optional() @Host() private readonly _tableService?: TableService\n    ) {\n        super();\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._validateNameOption();\n    }\n\n    /** Table won't know about column properties update so notify about it manually\n     * @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (this._tableService && (changes.sortable || changes.filterable || changes.groupable || changes.freezable)) {\n            this._tableService.markForCheck();\n        }\n    }\n\n    /** @hidden */\n    private _validateNameOption(): void {\n        if (typeof this.name !== 'string') {\n            throw Error('fdp-column: \"name\" option is required.');\n        }\n    }\n}\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, computed, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { TableIconDirective } from '@fundamental-ngx/core/table';\nimport { SortDirection, TableColumn, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n    selector: 'fdp-table-header-cell-content',\n    templateUrl: './table-header-cell-content.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [\n        `\n            fdp-table-header-cell-content {\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                flex-grow: 0;\n            }\n            fdp-table-header-cell-content .fd-table__text--no-wrap {\n                width: 100%;\n            }\n        `\n    ],\n    imports: [NgTemplateOutlet, IconComponent, TableIconDirective, AsyncPipe, NgStyle]\n})\nexport class TableHeaderCellContentComponent {\n    /** Table Id */\n    @Input()\n    id: string;\n\n    /** Column reference. */\n    @Input()\n    set column(value: Nullable<TableColumn>) {\n        this._column$.set(value);\n    }\n\n    get column(): Nullable<TableColumn> {\n        return this._column$();\n    }\n\n    /** Whether column has applied sorting. */\n    readonly hasSorting$ = computed(() => {\n        const column = this._column$();\n        return column && this._fdpTableService.sortRules$().has(column.key);\n    });\n\n    /** Whether column has applied filtering. */\n    readonly hasFilter$ = computed(() => {\n        const column = this._column$();\n        return column && this._fdpTableService.filterRules$().has(column.key);\n    });\n\n    /** Applied sorting. */\n    readonly sorting$ = computed(() => {\n        const column = this._column$();\n        return column && this._fdpTableService.sortRules$().get(column.key);\n    });\n\n    /** @hidden */\n    readonly SORT_DIRECTION = SortDirection;\n\n    /** @hidden */\n    private readonly _column$ = signal<Nullable<TableColumn>>(null);\n\n    /** @hidden */\n    private readonly _fdpTableService = inject(TableService);\n}\n","<div\n    class=\"fd-table__text--no-wrap\"\n    [class]=\"{ 'fd-table__inner': hasSorting$() || hasFilter$() }\"\n    [ngStyle]=\"{ 'justify-content': column?.align, gap: column?.align ? '0.5rem' : '' }\"\n>\n    <ng-template\n        [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"\n        [ngTemplateOutletContext]=\"{ column: column }\"\n    ></ng-template>\n    @if (hasSorting$() || hasFilter$()) {\n        <div class=\"fd-table__column-header-icons\">\n            @if (hasFilter$()) {\n                <fd-icon fd-table-icon glyph=\"filter\"></fd-icon>\n            }\n            @if (hasSorting$()) {\n                <fd-icon\n                    fd-table-icon\n                    [ariaHidden]=\"true\"\n                    [glyph]=\"sorting$()?.direction === SORT_DIRECTION.ASC ? 'sort-ascending' : 'sort-descending'\"\n                ></fd-icon>\n            }\n        </div>\n    }\n</div>\n<ng-content></ng-content>\n<ng-template #tableHeaderCellContentTemplate let-column=\"column\">\n    @if (column?.headerCellTemplate) {\n        <ng-template\n            [ngTemplateOutlet]=\"column.headerCellTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: column }\"\n        ></ng-template>\n    } @else {\n        <span [id]=\"id + '-header-cell-' + column?.name\" class=\"fd-table__cell--truncate-txt\">\n            {{ column?.labelValueChanges$ | async }}\n        </span>\n    }\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    OnDestroy,\n    OnInit,\n    ViewEncapsulation,\n    signal\n} from '@angular/core';\nimport { TableDialogCommonData } from '@fundamental-ngx/platform/table-helpers';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n    BarElementDirective,\n    BarLeftDirective,\n    BarRightDirective,\n    ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { ToolbarComponent, ToolbarItemDirective, ToolbarSpacerDirective } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface DialogTableColumn {\n    label: string;\n    key: string;\n}\n\nexport type VisibleColumnType = string; // ColumnKey\n\nexport interface ColumnsDialogData extends TableDialogCommonData {\n    availableColumns: DialogTableColumn[];\n    visibleColumns: VisibleColumnType[];\n}\n\nexport interface ColumnsDialogResultData {\n    visibleColumns: VisibleColumnType[];\n    columnOrder?: VisibleColumnType[];\n}\n\nclass SelectableColumn {\n    constructor(\n        /** Selected */\n        public selected: boolean,\n        /** Active */\n        public active: boolean,\n        /** Table Column it belongs to */\n        public column: DialogTableColumn\n    ) {}\n}\n\nconst INITIAL_SEARCH_TEXT = '';\nconst INITIAL_SHOW_ALL_ITEMS = true;\n\n@Component({\n    templateUrl: './columns.component.html',\n    styleUrl: './columns.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13ColumnsDialogComponent }],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        BarLeftDirective,\n        BarElementDirective,\n        TitleComponent,\n        BarRightDirective,\n        ResetButtonComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        ToolbarComponent,\n        SearchFieldComponent,\n        ToolbarSpacerDirective,\n        ButtonComponent,\n        ToolbarItemDirective,\n        ListComponent,\n        ListItemComponent,\n        CheckboxComponent,\n        FormsModule,\n        ListTitleDirective,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        AsyncPipe,\n        FdTranslatePipe,\n        InitialFocusDirective\n    ]\n})\nexport class P13ColumnsDialogComponent implements Resettable, OnInit, OnDestroy {\n    /** Indicates when reset command is available */\n    readonly isResetAvailable$ = signal(false);\n\n    /** Table columns available for grouping */\n    readonly availableColumns: DialogTableColumn[] = [];\n\n    /** All available columns for interacting */\n    _selectableColumns: SelectableColumn[] = [];\n\n    /** filtered columns that are rendered in the list */\n    _filteredColumns: SelectableColumn[] = [];\n\n    /** Search Query subject */\n    _searchQuerySubject = new BehaviorSubject<string>(INITIAL_SEARCH_TEXT);\n    /** Show All flag subject */\n    _showAllItemsSubject = new BehaviorSubject<boolean>(INITIAL_SHOW_ALL_ITEMS);\n\n    /** Selected columns count */\n    _selectedColumnsCount = 0;\n\n    /** Flag to track disabled state for move-down move-up buttons */\n    _moveUpDisabled = true;\n    /** Flag to track disabled state for move-down move-up buttons */\n    _moveDownDisabled = true;\n\n    /** @hidden */\n    get _isShownAllItems(): boolean {\n        return this._showAllItemsSubject.getValue();\n    }\n\n    /** @hidden */\n    get _selectAllDisabled(): boolean {\n        return !this._isShownAllItems || this._filteredColumns.length === 0;\n    }\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    constructor(\n        public dialogRef: DialogRef<ColumnsDialogData>,\n        private cdr: ChangeDetectorRef\n    ) {\n        const { availableColumns, visibleColumns } = this.dialogRef.data;\n\n        this.availableColumns = availableColumns?.map(({ label, key }) => ({ label, key })) || [];\n\n        this._initiateColumns(visibleColumns);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenToFilterOptions();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** Reset to the initial state */\n    reset(): void {\n        this._initiateColumns(this.availableColumns.map((c) => c.key));\n        this.isResetAvailable$.set(false);\n    }\n\n    /** Close dialog */\n    cancel(): void {\n        this.dialogRef.close(null);\n    }\n\n    /** Confirm changes and close dialog */\n    confirm(): void {\n        const visibleColumns = this._getVisibleColumnsFromSelectedColumns(this._selectableColumns);\n        const columnOrder = this._getColumnOrder(this._selectableColumns);\n        const result: ColumnsDialogResultData = { visibleColumns, columnOrder };\n        this.dialogRef.close(result);\n    }\n\n    /** @hidden */\n    _toggleSelectAll(selectAll: boolean): void {\n        this._selectableColumns.forEach((column) => (column.selected = selectAll));\n        this._onToggleColumn();\n    }\n\n    /** @hidden */\n    _onToggleColumn(): void {\n        this._countSelectedColumns();\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    _recalculateResetAvailability(): void {\n        let resettable = false;\n        if (this._selectedColumnsCount !== this.availableColumns.length) {\n            // Initially all columns are selected. If not, reset should be active\n            resettable = true;\n        } else {\n            // if all are selected, check for columns order to match the initial one\n            for (let index = 0; index < this.availableColumns.length; index++) {\n                if (this._selectableColumns[index].column.key !== this.availableColumns[index].key) {\n                    resettable = true;\n                    break;\n                }\n            }\n        }\n        this.isResetAvailable$.set(resettable);\n    }\n\n    /** @hidden */\n    _searchInputChange({ text }: SearchInput): void {\n        this._searchQuerySubject.next(text || '');\n    }\n\n    /** @hidden */\n    _toggleShowAll(): void {\n        const showAllItems = this._showAllItemsSubject.getValue();\n        this._showAllItemsSubject.next(!showAllItems);\n    }\n\n    /** @hidden */\n    _setActiveColumn(column: SelectableColumn | null): void {\n        this._selectableColumns.map((_column) => {\n            _column.active = _column === column;\n        });\n\n        this._calculateMovementButtonsState();\n    }\n\n    /** @hidden */\n    _moveActiveToTop(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n        this._moveColumnInFilteredListByIndex(this._getActiveColumnIndexInFilteredList(), 0);\n    }\n\n    /** @hidden */\n    _moveActiveToBottom(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n        this._moveColumnInFilteredListByIndex(\n            this._getActiveColumnIndexInFilteredList(),\n            this._filteredColumns.length - 1\n        );\n    }\n\n    /** @hidden */\n    _moveActiveUp(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n        const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n        this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex - 1);\n\n        // keep the focus back to the move up button as it gets lost on click\n        setTimeout(() => {\n            const moveUpBtn = event.target as HTMLElement;\n            moveUpBtn.focus();\n        }, 0);\n    }\n\n    /** @hidden */\n    _moveActiveDown(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n        const activeColumnIndex = this._getActiveColumnIndexInFilteredList();\n        this._moveColumnInFilteredListByIndex(activeColumnIndex, activeColumnIndex + 1);\n    }\n\n    /** @hidden */\n    _isReorderColumnButtonShowable(item: SelectableColumn): boolean {\n        return item.active && item.selected;\n    }\n\n    /** @hidden */\n    _filterByColumnKy(index: number, item: SelectableColumn): string {\n        return item?.column.key;\n    }\n\n    /**\n     * @hidden\n     * @param visibleColumnKeys keys of columns that should be displayed as selected.\n     * Also, their order matters: it will be used\n     */\n    private _initiateColumns(visibleColumnKeys: string[]): void {\n        const visibleColumnIndexMap = new Map(visibleColumnKeys.map((key, index) => [key, index]));\n        this._selectableColumns = this.availableColumns.slice().map(\n            (column, index: number): SelectableColumn => ({\n                column,\n                selected: visibleColumnKeys.includes(column.key),\n                active: index === 0\n            })\n        );\n\n        // keep count of selected\n        this._countSelectedColumns();\n\n        this._recalculateResetAvailability();\n\n        // reset filter settings settings\n        this._searchQuerySubject.next(INITIAL_SEARCH_TEXT);\n        this._showAllItemsSubject.next(INITIAL_SHOW_ALL_ITEMS);\n    }\n\n    /** @hidden */\n    private _listenToFilterOptions(): void {\n        this._subscriptions.add(\n            combineLatest([this._showAllItemsSubject, this._searchQuerySubject])\n                .pipe(debounceTime(20))\n                .subscribe(([showAll, searchQuery]) => {\n                    this._filteredColumns = this._selectableColumns.filter((item) => {\n                        const matchesSearchQuery = item.column.label\n                            .toLocaleLowerCase()\n                            .includes(searchQuery.toLocaleLowerCase());\n                        const matchesShowAll = showAll || item.selected;\n                        return matchesSearchQuery && matchesShowAll;\n                    });\n                    this._onChangeFilteredColumnsList();\n\n                    this.cdr.markForCheck();\n                })\n        );\n    }\n\n    /** @hidden */\n    private _onChangeFilteredColumnsList(): void {\n        this._calculateMovementButtonsState();\n    }\n\n    /** @hidden */\n    private _getVisibleColumnsFromSelectedColumns(columns = this._selectableColumns): VisibleColumnType[] {\n        return columns.filter(({ selected }) => selected).map(({ column }): VisibleColumnType => column.key);\n    }\n\n    /** @hidden */\n    private _getColumnOrder(columns: SelectableColumn[]): VisibleColumnType[] {\n        return columns.map((column) => column.column.key);\n    }\n\n    /** @hidden */\n    private _getActiveColumnIndexInFilteredList(): number {\n        return this._filteredColumns.findIndex(({ active }) => active);\n    }\n\n    /** @hidden */\n    private _moveColumnInFilteredListByIndex(from: number, to: number): void {\n        const { movedItem, replacedItem } = this._moveElementInTheListByIndex(this._filteredColumns, from, to);\n        /**\n         * need to reflect analogical movement in the original list\n         * with respect to the original list order\n         */\n        this._moveColumnInSelectableList(movedItem, replacedItem);\n\n        this._calculateMovementButtonsState();\n        this._recalculateResetAvailability();\n    }\n\n    /**\n     * @hidden\n     * Move column in selectable list.\n     */\n    private _moveColumnInSelectableList(itemToMove: SelectableColumn, targetItem: SelectableColumn): void {\n        const list = this._selectableColumns;\n        this._moveElementInTheListByIndex(list, list.indexOf(itemToMove), list.indexOf(targetItem));\n    }\n\n    /**\n     * @hidden\n     * Move element in the list\n     * @return moved item and replaced item.\n     */\n    private _moveElementInTheListByIndex<T>(\n        list: T[],\n        fromIndex: number,\n        toIndex: number\n    ): { movedItem: T; replacedItem: T } {\n        const listLength = list.length;\n\n        fromIndex = Math.min(Math.max(fromIndex, 0), listLength - 1);\n        toIndex = Math.min(Math.max(toIndex, 0), listLength - 1);\n\n        const replacedItem = list[toIndex];\n        const movedItem = list.splice(fromIndex, 1)[0];\n\n        list.splice(toIndex, 0, movedItem);\n\n        return { movedItem, replacedItem };\n    }\n\n    /** @hidden */\n    private _countSelectedColumns(): void {\n        this._selectedColumnsCount = this._selectableColumns.filter(({ selected }) => selected).length;\n    }\n\n    /** @hidden */\n    private _calculateMovementButtonsState(): void {\n        const activeIndex = this._getActiveColumnIndexInFilteredList();\n        this._moveUpDisabled = activeIndex < 1;\n        this._moveDownDisabled = activeIndex < 0 || activeIndex >= this._filteredColumns.length - 1;\n    }\n}\n","<fd-dialog class=\"fdp-table-p13-columns-dialog\">\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <div fd-bar-left>\n                <fd-bar-element>\n                    <h4 fd-title [headerSize]=\"4\">\n                        {{ ('platformTable.P13ColumnsDialogHeader' | fdTranslate)() }}\n                    </h4>\n                </fd-bar-element>\n            </div>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <fdp-table-reset-button></fdp-table-reset-button>\n                </fd-bar-element>\n            </div>\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body>\n        <fd-toolbar>\n            <fdp-search-field\n                [placeholder]=\"('platformTable.P13ColumnsDialogSearchPlaceholder' | fdTranslate)()\"\n                [inputText]=\"(_searchQuerySubject | async) || ''\"\n                [suggestions]=\"[]\"\n                (inputChange)=\"_searchInputChange($event)\"\n                fdkInitialFocus\n            ></fdp-search-field>\n            <fd-toolbar-spacer></fd-toolbar-spacer>\n            <!-- Show Selected/All -->\n            <button fd-toolbar-item fd-button fdType=\"transparent\" (click)=\"_toggleShowAll()\">\n                @if ((_showAllItemsSubject | async) === true) {\n                    {{ ('platformTable.P13ColumnsDialogsShowSelected' | fdTranslate)() }}\n                } @else {\n                    {{ ('platformTable.P13ColumnsDialogShowAll' | fdTranslate)() }}\n                }\n            </button>\n        </fd-toolbar>\n        <ul fd-list [selection]=\"true\" aria-multiselectable=\"true\">\n            <li\n                fd-list-item\n                (focus)=\"_setActiveColumn(null)\"\n                [selected]=\"_selectedColumnsCount === _selectableColumns.length\"\n            >\n                <fd-checkbox\n                    [ngModel]=\"_selectedColumnsCount === _selectableColumns.length\"\n                    (ngModelChange)=\"_toggleSelectAll($event)\"\n                    [disabled]=\"_selectAllDisabled\"\n                ></fd-checkbox>\n                <span fd-list-title>\n                    {{\n                        (\n                            'platformTable.P13ColumnsDialogSelectAll'\n                            | fdTranslate\n                                : {\n                                      selectedColumnsCount: _selectedColumnsCount,\n                                      selectableColumnsCount: _selectableColumns.length\n                                  }\n                        )()\n                    }}\n                </span>\n            </li>\n            @for (item of _filteredColumns; track _filterByColumnKy($index, item)) {\n                <li\n                    fd-list-item\n                    [preventClick]=\"true\"\n                    [class.fd-select-item--selected]=\"item.selected\"\n                    [selected]=\"item.selected\"\n                    [class.fd-select-item--active]=\"item.active\"\n                    (focus)=\"_setActiveColumn(item)\"\n                >\n                    <fd-checkbox [(ngModel)]=\"item.selected\" (ngModelChange)=\"_onToggleColumn()\"></fd-checkbox>\n                    <span fd-list-title>\n                        {{ item.column.label }}\n                    </span>\n\n                    <!-- Active Button Movement -->\n                    @if (_isReorderColumnButtonShowable(item)) {\n                        <button\n                            fd-button\n                            fdType=\"transparent\"\n                            glyph=\"collapse-group\"\n                            [disabled]=\"_moveUpDisabled\"\n                            [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n                            [title]=\"('platformTable.P13ColumnsDialogMoveToTopBtn' | fdTranslate)()\"\n                            (click)=\"_moveActiveToTop($event)\"\n                            (keydown.enter)=\"_moveActiveToTop($event)\"\n                        ></button>\n                    }\n                    @if (_isReorderColumnButtonShowable(item)) {\n                        <button\n                            fd-button\n                            fdType=\"transparent\"\n                            glyph=\"slim-arrow-up\"\n                            [disabled]=\"_moveUpDisabled\"\n                            [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n                            [title]=\"('platformTable.P13ColumnsDialogMoveUpBtn' | fdTranslate)()\"\n                            (click)=\"_moveActiveUp($event)\"\n                            (keydown.enter)=\"_moveActiveUp($event)\"\n                        ></button>\n                    }\n                    @if (_isReorderColumnButtonShowable(item)) {\n                        <button\n                            fd-button\n                            fdType=\"transparent\"\n                            glyph=\"slim-arrow-down\"\n                            [disabled]=\"_moveDownDisabled\"\n                            [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n                            [title]=\"('platformTable.P13ColumnsDialogMoveDownBtn' | fdTranslate)()\"\n                            (click)=\"_moveActiveDown($event)\"\n                            (keydown.enter)=\"_moveActiveDown($event)\"\n                        ></button>\n                    }\n                    @if (_isReorderColumnButtonShowable(item)) {\n                        <button\n                            fd-button\n                            fdType=\"transparent\"\n                            glyph=\"expand-group\"\n                            [disabled]=\"_moveDownDisabled\"\n                            [attr.aria-label]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n                            [title]=\"('platformTable.P13ColumnsDialogMoveToBottomBtn' | fdTranslate)()\"\n                            (click)=\"_moveActiveToBottom($event)\"\n                            (keydown.enter)=\"_moveActiveToBottom($event)\"\n                        ></button>\n                    }\n                </li>\n            }\n        </ul>\n    </fd-dialog-body>\n    <fd-dialog-footer>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformTable.P13ColumnsDialogConfirmationBtnLabel' | fdTranslate)()\"\n            (click)=\"confirm()\"\n        ></fd-button-bar>\n        <fd-button-bar\n            fdType=\"transparent\"\n            [label]=\"('platformTable.P13ColumnsDialogCancelBtnLabel' | fdTranslate)()\"\n            (click)=\"cancel()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import {\n    CollectionFilter,\n    FilterableColumnDataType,\n    FilterStrategy,\n    getFilterStrategiesBasedOnDataType,\n    TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nexport interface FilterableColumn {\n    label: string;\n    key: string;\n    dataType: FilterableColumnDataType;\n    filterable?: boolean;\n    filterSelectOptions?: string[]; // add optional filterSelectOptions\n}\n\nexport interface FilterDialogData extends TableDialogCommonData {\n    collectionFilter: CollectionFilter[];\n    columns: FilterableColumn[];\n    validator?: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n\nexport interface FilterDialogResultData {\n    collectionFilter: CollectionFilter[];\n}\n\n/**\n * Filter Rule\n *\n * represents one rule per row\n */\n\nexport class FilterRule<T = any> {\n    /** Validation flg */\n    isValid = false;\n\n    /** Available strategies options */\n    strategies: ReadonlyArray<FilterStrategy> = [];\n\n    /** Data type */\n    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    filterSelectOptions: string[] = [];\n\n    /** returns whether filter rule has value */\n    get hasValue(): boolean {\n        return this.valueExists(this.value) || this.valueExists(this.value2);\n    }\n\n    /** @hidden */\n    constructor(\n        readonly columns: ReadonlyArray<FilterableColumn>,\n        /** Column key the rule belongs to */\n        public columnKey?: string,\n        /** Data type */\n        public strategy?: FilterStrategy,\n        /** Main filter value */\n        public value?: T | null,\n        /** Additional filter value */\n        public value2?: T | null\n    ) {\n        if (!this.columnKey) {\n            this.setColumnKey(columns[0]?.key);\n        }\n        if (!this.dataType) {\n            this.setDataTypeByColumnKey(this.columnKey);\n        }\n        if (this.strategies.length === 0) {\n            this.setStrategiesByColumnKey(this.columnKey);\n        }\n        if (this.filterSelectOptions.length === 0) {\n            this.setFilterSelectOptionsByColumnKey(this.columnKey);\n        }\n    }\n\n    /** @hidden */\n    setValid(isValid: boolean): void {\n        this.isValid = isValid;\n    }\n\n    /** @hidden */\n    setValue(value: T | null): void {\n        this.value = value;\n    }\n\n    /** @hidden */\n    setValue2(value: T | null): void {\n        this.value2 = value;\n    }\n\n    /** @hidden */\n    setStrategy(strategy: FilterStrategy): void {\n        this.strategy = strategy;\n    }\n\n    /** @hidden */\n    setStrategiesByColumnKey(columnKey?: string): void {\n        const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n        if (!dataType) {\n            return;\n        }\n\n        const strategies = getFilterStrategiesBasedOnDataType(dataType);\n\n        if (this.strategies === strategies) {\n            return;\n        }\n\n        this.strategies = strategies;\n\n        if (!this.strategies.includes(this.strategy!)) {\n            this.setStrategy(strategies[0]);\n        }\n    }\n\n    /** @hidden */\n    setColumnKey(columnKey: string): void {\n        if (columnKey === this.columnKey) {\n            return;\n        }\n        this.columnKey = columnKey;\n\n        // reset values\n        this.setValue(null);\n        this.setValue2(null);\n\n        // update data type\n        this.setDataTypeByColumnKey(columnKey);\n\n        // update available Filter options\n        this.setFilterSelectOptionsByColumnKey(columnKey);\n\n        // update available strategies list\n        this.setStrategiesByColumnKey(columnKey);\n    }\n\n    /** @hidden */\n    setDataTypeByColumnKey(columnKey?: string): void {\n        const dataType = this.columns.find((column) => column.key === columnKey)?.dataType;\n        this.dataType = dataType;\n    }\n\n    /** @hidden */\n    setFilterSelectOptionsByColumnKey(columnKey?: string): void {\n        const filterSelectOptions = this.columns.find((column) => column.key === columnKey)?.filterSelectOptions;\n        this.filterSelectOptions = filterSelectOptions ? filterSelectOptions : [];\n    }\n\n    /** @hidden */\n    private valueExists(value: any): boolean {\n        return !!value || value === 0 || typeof value === 'boolean';\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport {\n    FILTER_STRATEGY,\n    FILTER_STRATEGY_LABEL,\n    FilterableColumnDataType\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { LayoutGridColDirective, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRule } from './filtering.model';\n\n@Component({\n    selector: 'fdp-table-filter-rule',\n    templateUrl: './filter-rule.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        LayoutGridRowDirective,\n        LayoutGridColDirective,\n        SelectComponent,\n        FormsModule,\n        OptionComponent,\n        NgTemplateOutlet,\n        DatePickerComponent,\n        FormControlComponent,\n        FdTranslatePipe\n    ]\n})\nexport class FilterRuleComponent implements OnDestroy {\n    /** Rule to be displayed **/\n    @Input() rule: FilterRule;\n\n    /** Emits when rule is changed */\n    @Output() ruleChange: EventEmitter<void> = new EventEmitter();\n\n    /** Emits when rule state is changed */\n    @Output() ruleStateChange: EventEmitter<boolean> = new EventEmitter();\n\n    /** @hidden */\n    readonly FILTER_STRATEGY = FILTER_STRATEGY;\n\n    /** @hidden */\n    readonly DATA_TYPE = FilterableColumnDataType;\n\n    /** @hidden */\n    readonly strategyLabels = FILTER_STRATEGY_LABEL;\n\n    /** @hidden */\n    @ViewChild(NgForm)\n    set ngForm(ngForm: NgForm) {\n        if (!ngForm) {\n            return;\n        }\n        this._subscriptions.add(\n            ngForm.statusChanges\n                ?.pipe(\n                    // Skip first that triggers on initial phase\n                    skip(1)\n                )\n                .subscribe(() => {\n                    const isValid = !!ngForm.valid;\n                    this.rule.setValid(isValid);\n                    this.ruleStateChange.emit(isValid);\n                })\n        );\n    }\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    _onModelChange(): void {\n        this.ruleChange.emit();\n    }\n}\n","<div fdLayoutGridRow>\n    <div fdLayoutGridCol colGrow>\n        <div fdLayoutGridRow>\n            <div fdLayoutGridCol colGrow>\n                <!-- Column -->\n                <fd-select\n                    class=\"filter-row__select\"\n                    [ngModel]=\"rule.columnKey\"\n                    (ngModelChange)=\"rule.setColumnKey($event); _onModelChange()\"\n                >\n                    @for (column of rule.columns; track column) {\n                        <li fd-option [value]=\"column.key\">{{ column.label }}</li>\n                    }\n                </fd-select>\n            </div>\n            <div fdLayoutGridCol colGrow>\n                <!-- Strategy -->\n                <fd-select\n                    class=\"filter-row__select\"\n                    [ngModel]=\"rule.strategy\"\n                    (ngModelChange)=\"rule.setStrategy($event); _onModelChange()\"\n                >\n                    @for (strategy of rule.strategies; track strategy) {\n                        <li fd-option [value]=\"strategy\">\n                            {{\n                                (\n                                    strategyLabels[strategy] || 'platformTable.P13FilterStrategyLabelNotDefined'\n                                    | fdTranslate\n                                )()\n                            }}\n                        </li>\n                    }\n                </fd-select>\n            </div>\n        </div>\n    </div>\n    <div fdLayoutGridCol colGrow>\n        <div fdLayoutGridRow ngForm>\n            @if (rule.strategy === FILTER_STRATEGY.BETWEEN) {\n                <div fdLayoutGridCol colGrow>\n                    <ng-template\n                        [ngTemplateOutlet]=\"ruleInputTemplate\"\n                        [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n                    ></ng-template>\n                </div>\n                <div fdLayoutGridCol colGrow>\n                    <ng-template\n                        [ngTemplateOutlet]=\"ruleInputTemplate\"\n                        [ngTemplateOutletContext]=\"{ valueKey: 'value2' }\"\n                    ></ng-template>\n                </div>\n            } @else {\n                <div fdLayoutGridCol colGrow>\n                    <ng-template\n                        [ngTemplateOutlet]=\"ruleInputTemplate\"\n                        [ngTemplateOutletContext]=\"{ valueKey: 'value' }\"\n                    ></ng-template>\n                </div>\n            }\n\n            <!-- Rule Control Based on Data Type -->\n            <ng-template #ruleInputTemplate let-valueKey=\"valueKey\">\n                @if (rule.dataType === DATA_TYPE.DATE) {\n                    <fd-date-picker\n                        class=\"filter-row__input\"\n                        type=\"single\"\n                        [required]=\"true\"\n                        [name]=\"valueKey\"\n                        [(ngModel)]=\"rule[valueKey]\"\n                        (ngModelChange)=\"_onModelChange()\"\n                    ></fd-date-picker>\n                } @else if (rule.dataType === DATA_TYPE.BOOLEAN) {\n                    <fd-select\n                        class=\"filter-row__select\"\n                        [name]=\"valueKey\"\n                        [(ngModel)]=\"rule[valueKey]\"\n                        (ngModelChange)=\"_onModelChange()\"\n                        [required]=\"true\"\n                    >\n                        <li fd-option [value]=\"undefined\">\n                            {{ ('platformTable.P13FilterBooleanOptionNotDefined' | fdTranslate)() }}\n                        </li>\n                        <li fd-option [value]=\"true\">\n                            {{ ('platformTable.P13FilterBooleanOptionTrue' | fdTranslate)() }}\n                        </li>\n                        <li fd-option [value]=\"false\">\n                            {{ ('platformTable.P13FilterBooleanOptionFalse' | fdTranslate)() }}\n                        </li>\n                    </fd-select>\n                } @else if (rule.filterSelectOptions.length) {\n                    <!-- Filter options dropdown menu -->\n                    <fd-select\n                        [ngModel]=\"rule[valueKey]\"\n                        (ngModelChange)=\"rule.setValue($event); _onModelChange()\"\n                        [required]=\"true\"\n                        [name]=\"valueKey\"\n                        class=\"filter-row__select\"\n                    >\n                        @for (option of rule.filterSelectOptions; track $index) {\n                            <li fd-option [value]=\"option\">{{ option }}</li>\n                        }\n                    </fd-select>\n                } @else {\n                    <input\n                        type=\"text\"\n                        class=\"filter-row__input\"\n                        fd-form-control\n                        required\n                        [name]=\"valueKey\"\n                        [(ngModel)]=\"rule[valueKey]\"\n                        (ngModelChange)=\"_onModelChange()\"\n                    />\n                }\n            </ng-template>\n        </div>\n    </div>\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, signal } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n    BarElementDirective,\n    BarLeftDirective,\n    BarRightDirective,\n    ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { LayoutGridColDirective, LayoutGridComponent, LayoutGridRowDirective } from '@fundamental-ngx/core/layout-grid';\nimport { PanelComponent, PanelContentDirective, PanelTitleDirective } from '@fundamental-ngx/core/panel';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FilterRuleComponent } from './filter-rule.component';\nimport { FilterDialogData, FilterDialogResultData, FilterRule, FilterableColumn } from './filtering.model';\n\nexport { FilterDialogData, FilterDialogResultData };\n\n@Component({\n    templateUrl: './filtering.component.html',\n    styleUrl: './filtering.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13FilteringDialogComponent }],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        BarLeftDirective,\n        BarElementDirective,\n        TitleComponent,\n        BarRightDirective,\n        ResetButtonComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        PanelComponent,\n        PanelTitleDirective,\n        PanelContentDirective,\n        LayoutGridComponent,\n        LayoutGridRowDirective,\n        FilterRuleComponent,\n        LayoutGridColDirective,\n        ButtonComponent,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        FdTranslatePipe\n    ]\n})\nexport class P13FilteringDialogComponent implements Resettable {\n    /** Indicates when reset command is available */\n    readonly isResetAvailable$ = signal(false);\n\n    /** Table columns available for filtering */\n    readonly columns: FilterableColumn[] = [];\n\n    /**\n     * @hidden\n     * Include Rules\n     */\n    _includeRules: FilterRule[] = [];\n\n    /**\n     * @hidden\n     * Exclude Rules\n     */\n    _excludeRules: FilterRule[] = [];\n\n    /**\n     * @hidden\n     * Count of valid included rules\n     */\n    _validIncludeRulesCount = 0;\n\n    /**\n     * @hidden\n     * Count of valid excluded rules\n     */\n    _validExcludeRulesCount = 0;\n\n    /**\n     * @hidden\n     * Panel opened/closed flag\n     */\n    _includePanelExpanded = true;\n\n    /**\n     * @hidden\n     * Panel opened/closed flag\n     */\n    _excludePanelExpanded = false;\n\n    /** @hidden */\n    constructor(public dialogRef: DialogRef<FilterDialogData>) {\n        const { columns, collectionFilter } = this.dialogRef.data;\n\n        this.columns = columns.filter((column) => column.filterable) || [];\n\n        this._initiateRules(collectionFilter);\n\n        this._calculateValidRulesCount();\n\n        this._excludePanelExpanded = this._validExcludeRulesCount > 0;\n\n        this._recalculateResetAvailability();\n    }\n\n    /** Reset changes to the initial state */\n    reset(): void {\n        this._initiateRules();\n        this.isResetAvailable$.set(false);\n        this._validIncludeRulesCount = 0;\n        this._validExcludeRulesCount = 0;\n    }\n\n    /** Close dialog */\n    cancel(): void {\n        this.dialogRef.close(null);\n    }\n\n    /** Confirm changes and close dialog */\n    confirm(): void {\n        const includeFilters = this._getCollectionFiltersFromIncludeRules();\n        const excludeFilters = this._getCollectionFiltersFromExcludeRules();\n        const validator = this.dialogRef.data.validator;\n        const combinedFilters = [...includeFilters, ...excludeFilters];\n\n        if (!validator || validator(combinedFilters)) {\n            const result: FilterDialogResultData = { collectionFilter: combinedFilters };\n\n            this.dialogRef.close(result);\n        }\n    }\n\n    /** @hidden */\n    _removeRule(rule: FilterRule, rules: FilterRule[]): void {\n        const index = rules.indexOf(rule);\n\n        if (index === -1) {\n            return;\n        }\n\n        rules.splice(index, 1);\n\n        // Keep at least one item in the list\n        if (rules.length === 0) {\n            rules.push(new FilterRule(this.columns));\n        }\n\n        this._recalculateResetAvailability();\n\n        this._calculateValidRulesCount();\n    }\n\n    /** @hidden */\n    _addNewRule(rules: FilterRule[]): void {\n        const lastRule = rules.slice(-1)[0];\n        rules.push(new FilterRule(this.columns, lastRule?.columnKey, lastRule?.strategy));\n    }\n\n    /** @hidden */\n    _recalculateResetAvailability(): void {\n        const hasOnlyOneEmptyIncludeRule = this._includeRules.length === 1 && !this._includeRules[0].hasValue;\n        const hasOnlyOneEmptyExcludeRule = this._excludeRules.length === 1 && !this._excludeRules[0].hasValue;\n        this.isResetAvailable$.set(!hasOnlyOneEmptyIncludeRule || !hasOnlyOneEmptyExcludeRule);\n    }\n\n    /** @hidden */\n    _onRuleStateChange(): void {\n        this._calculateValidRulesCount();\n    }\n\n    /** @hidden */\n    private _initiateRules(initialRules?: CollectionFilter[]): void {\n        this._includeRules = this._createRules(initialRules?.filter(({ exclude }) => !exclude));\n        this._excludeRules = this._createRules(initialRules?.filter(({ exclude }) => exclude));\n\n        [this._includeRules, this._excludeRules].forEach((rules) => {\n            // Rules on initial phase are considered as valid\n            rules.forEach((rule) => rule.setValid(true));\n            // Keep at least one item in the list\n            if (rules.length === 0) {\n                rules.push(new FilterRule(this.columns));\n            }\n        });\n    }\n\n    /** @hidden */\n    private _createRules(collectionFilter: CollectionFilter[] = []): FilterRule[] {\n        return collectionFilter.map(\n            ({ field, value, value2, strategy }): FilterRule =>\n                new FilterRule(this.columns, field, strategy, value, value2)\n        );\n    }\n\n    /** @hidden */\n    private _getCollectionFiltersFromRules(rules: FilterRule[]): CollectionFilter[] {\n        return rules.filter(this._isRuleValid).map(\n            ({ columnKey, strategy, value, value2 }): CollectionFilter => ({\n                field: columnKey!,\n                value,\n                value2,\n                strategy: strategy!\n            })\n        );\n    }\n\n    /** @hidden */\n    private _getCollectionFiltersFromIncludeRules(): CollectionFilter[] {\n        return this._getCollectionFiltersFromRules(this._includeRules).map(\n            (collectionFilter): CollectionFilter => ({\n                ...collectionFilter,\n                exclude: false\n            })\n        );\n    }\n\n    /** @hidden */\n    private _getCollectionFiltersFromExcludeRules(): CollectionFilter[] {\n        return this._getCollectionFiltersFromRules(this._excludeRules).map(\n            (collectionFilter): CollectionFilter => ({\n                ...collectionFilter,\n                exclude: true\n            })\n        );\n    }\n\n    /** @hidden */\n    private _calculateValidRulesCount = (): void => {\n        this._validIncludeRulesCount = this._includeRules.filter(this._isRuleValid).length;\n        this._validExcludeRulesCount = this._excludeRules.filter(this._isRuleValid).length;\n    };\n\n    /** @hidden */\n    private _isRuleValid = (rule: FilterRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <div fd-bar-left>\n                <fd-bar-element>\n                    <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13FilterDialogHeader' | fdTranslate)() }}</h4>\n                </fd-bar-element>\n            </div>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <fdp-table-reset-button></fdp-table-reset-button>\n                </fd-bar-element>\n            </div>\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body>\n        <!-- Include Rules -->\n        <fd-panel [expanded]=\"_includePanelExpanded\">\n            <div fd-panel-title>\n                {{\n                    (\n                        (_validIncludeRulesCount > 0\n                            ? 'platformTable.P13FilterDialogIncludePanelTitleWithCount'\n                            : 'platformTable.P13FilterDialogIncludePanelTitleWithoutCount'\n                        ) | fdTranslate: { count: _validIncludeRulesCount }\n                    )()\n                }}\n            </div>\n            <div fd-panel-content>\n                @for (rule of _includeRules; track rule) {\n                    <fd-layout-grid>\n                        <div fdLayoutGridRow>\n                            <fdp-table-filter-rule\n                                [fdLayoutGridCol]=\"10\"\n                                [rule]=\"rule\"\n                                (ruleChange)=\"_recalculateResetAvailability()\"\n                                (ruleStateChange)=\"_onRuleStateChange()\"\n                            ></fdp-table-filter-rule>\n                            <!-- Actions buttons -->\n                            <div [fdLayoutGridCol]=\"2\">\n                                <button\n                                    fd-button\n                                    fdType=\"transparent\"\n                                    glyph=\"sys-cancel\"\n                                    [attr.aria-label]=\"\n                                        ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n                                    \"\n                                    [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n                                    (click)=\"_removeRule(rule, _includeRules)\"\n                                ></button>\n                                @if (_includeRules.length - 1 === $index) {\n                                    <button\n                                        fd-button\n                                        fdType=\"transparent\"\n                                        glyph=\"add\"\n                                        [attr.aria-label]=\"\n                                            ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n                                        \"\n                                        [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n                                        (click)=\"_addNewRule(_includeRules)\"\n                                    ></button>\n                                }\n                            </div>\n                        </div>\n                    </fd-layout-grid>\n                }\n            </div>\n        </fd-panel>\n        <!-- Exclude Rules -->\n        <fd-panel [expanded]=\"_excludePanelExpanded\">\n            <div fd-panel-title>\n                {{\n                    (\n                        (_validExcludeRulesCount > 0\n                            ? 'platformTable.P13FilterDialogExcludePanelTitleWithCount'\n                            : 'platformTable.P13FilterDialogExcludePanelTitleWithoutCount'\n                        ) | fdTranslate: { count: _validExcludeRulesCount }\n                    )()\n                }}\n            </div>\n            <div fd-panel-content>\n                @for (rule of _excludeRules; track rule) {\n                    <fd-layout-grid>\n                        <div fdLayoutGridRow>\n                            <fdp-table-filter-rule\n                                [fdLayoutGridCol]=\"10\"\n                                [rule]=\"rule\"\n                                (ruleChange)=\"_recalculateResetAvailability()\"\n                                (ruleStateChange)=\"_onRuleStateChange()\"\n                            ></fdp-table-filter-rule>\n                            <!-- Actions buttons -->\n                            <div [fdLayoutGridCol]=\"2\">\n                                <button\n                                    fd-button\n                                    fdType=\"transparent\"\n                                    glyph=\"sys-cancel\"\n                                    [attr.aria-label]=\"\n                                        ('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\n                                    \"\n                                    [title]=\"('platformTable.P13FilterDialogRemoveFilterBtnTitle' | fdTranslate)()\"\n                                    (click)=\"_removeRule(rule, _excludeRules)\"\n                                ></button>\n                                @if (_excludeRules.length - 1 === $index) {\n                                    <button\n                                        fd-button\n                                        fdType=\"transparent\"\n                                        glyph=\"add\"\n                                        [attr.aria-label]=\"\n                                            ('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\n                                        \"\n                                        [title]=\"('platformTable.P13FilterDialogAddFilterBtnTitle' | fdTranslate)()\"\n                                        (click)=\"_addNewRule(_excludeRules)\"\n                                    ></button>\n                                }\n                            </div>\n                        </div>\n                    </fd-layout-grid>\n                }\n            </div>\n        </fd-panel>\n    </fd-dialog-body>\n    <fd-dialog-footer>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformTable.P13FilterDialogConfirmationBtnLabel' | fdTranslate)()\"\n            (click)=\"confirm()\"\n        ></fd-button-bar>\n        <fd-button-bar\n            fdType=\"transparent\"\n            [label]=\"('platformTable.P13FilterDialogCancelBtnLabel' | fdTranslate)()\"\n            (click)=\"cancel()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation } from '@angular/core';\nimport {\n    CollectionGroup,\n    getUniqueListValuesByKey,\n    SortDirection,\n    TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent,\n    DialogRef\n} from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n    BarElementDirective,\n    BarLeftDirective,\n    BarRightDirective,\n    ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ResetButtonComponent, Resettable, RESETTABLE_TOKEN } from '../../reset-button/reset-button.component';\n\nexport interface GroupDialogColumn {\n    label: string;\n    key: string;\n}\n\nexport interface GroupDialogData extends TableDialogCommonData {\n    collectionGroup: CollectionGroup[];\n    columns: GroupDialogColumn[];\n}\n\nexport interface GroupDialogResultData {\n    collectionGroup: CollectionGroup[];\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass GroupRule {\n    get isValid(): boolean {\n        return this.columnKey !== NOT_SELECTED_OPTION_VALUE;\n    }\n\n    constructor(\n        /** Column key the rule belongs to */\n        public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n        /** Show Field as Column */\n        public showAsColumn = true\n    ) {}\n}\n\n@Component({\n    templateUrl: './grouping.component.html',\n    styleUrl: './grouping.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13GroupingDialogComponent }],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        BarLeftDirective,\n        BarElementDirective,\n        TitleComponent,\n        BarRightDirective,\n        ResetButtonComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        SelectComponent,\n        OptionComponent,\n        CheckboxComponent,\n        FormsModule,\n        ButtonComponent,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        FdTranslatePipe\n    ]\n})\nexport class P13GroupingDialogComponent implements Resettable {\n    /** Table columns available for grouping */\n    readonly columns: GroupDialogColumn[] = [];\n    /** Indicates when reset command is available */\n    readonly isResetAvailable$ = signal(false);\n\n    /** Group rules to render */\n    rules: GroupRule[] = [];\n\n    /** @hidden */\n    constructor(public dialogRef: DialogRef<GroupDialogData>) {\n        const { columns, collectionGroup } = this.dialogRef.data;\n\n        this.columns = columns || [];\n\n        this._initiateRules(collectionGroup);\n    }\n\n    /** Reset changes to the initial state */\n    reset(): void {\n        this._initiateRules();\n        this.isResetAvailable$.set(false);\n    }\n\n    /** Close dialog */\n    cancel(): void {\n        this.dialogRef.close(null);\n    }\n\n    /** Confirm changes and close dialog */\n    confirm(): void {\n        const collectionGroup = this._getCollectionGroupFromGroupRules(this._getUniqueRules(this.rules));\n        const result: GroupDialogResultData = { collectionGroup };\n        this.dialogRef.close(result);\n    }\n\n    /** @hidden */\n    _recalculateResetAvailability(): void {\n        const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n        this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n    }\n\n    /** @hidden */\n    _removeRule(rule: GroupRule): void {\n        this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n        // Keep at least one item in the list\n        if (this.rules.length === 0) {\n            this.rules.push(new GroupRule());\n        }\n\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    _addNew(index: number): void {\n        this.rules.splice(index + 1, 0, new GroupRule());\n    }\n\n    /** @hidden */\n    _onRuleColumnKeyChange(rule: GroupRule, columnKey: string): void {\n        rule.columnKey = columnKey;\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    _onRuleShowAsColumnChange(rule: GroupRule, value: boolean): void {\n        rule.showAsColumn = value;\n        this._recalculateResetAvailability();\n    }\n\n    /** Get available columns for a rule */\n    getAvailableColumns(rule: GroupRule): GroupDialogColumn[] {\n        const selectedKeys = this.rules.map((r) => r.columnKey).filter((key) => key !== NOT_SELECTED_OPTION_VALUE);\n        return this.columns.filter((column) => !selectedKeys.includes(column.key) || column.key === rule.columnKey);\n    }\n\n    /** @hidden */\n    private _initiateRules(collectionGroup?: CollectionGroup[]): void {\n        this.rules = this._createGroupRules(collectionGroup);\n\n        // Keep at least one item in the list\n        if (this.rules.length === 0) {\n            this.rules.push(new GroupRule());\n        }\n\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    private _createGroupRules(collectionGroup: CollectionGroup[] = []): GroupRule[] {\n        return collectionGroup.map(({ field, showAsColumn }): GroupRule => new GroupRule(field, showAsColumn));\n    }\n\n    /** @hidden */\n    private _getCollectionGroupFromGroupRules(rules = this.rules): CollectionGroup[] {\n        return rules.filter(this._isRuleValid).map(\n            ({ columnKey, showAsColumn }): CollectionGroup => ({\n                field: columnKey!,\n                showAsColumn,\n                direction: SortDirection.NONE\n            })\n        );\n    }\n\n    /** @hidden */\n    private _getUniqueRules(rules: GroupRule[]): GroupRule[] {\n        return getUniqueListValuesByKey(rules, 'columnKey');\n    }\n\n    /** @hidden */\n    private _isRuleValid = (rule: GroupRule): boolean => rule?.isValid;\n}\n","<fd-dialog class=\"fdp-table-p13-grouping-dialog\">\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <div fd-bar-left>\n                <fd-bar-element>\n                    <h4 fd-title [headerSize]=\"4\">{{ ('platformTable.P13GroupDialogHeader' | fdTranslate)() }}</h4>\n                </fd-bar-element>\n            </div>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <fdp-table-reset-button></fdp-table-reset-button>\n                </fd-bar-element>\n            </div>\n        </ng-template>\n    </fd-dialog-header>\n\n    <fd-dialog-body>\n        @for (rule of rules; track rule; let i = $index) {\n            <div class=\"group-row\">\n                <fd-select\n                    class=\"group-row__select\"\n                    [value]=\"rule.columnKey\"\n                    (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n                    [placeholder]=\"('platformTable.P13GroupDialogNoneSelectedColumnSelectPlaceholder' | fdTranslate)()\"\n                >\n                    @for (column of getAvailableColumns(rule); track column) {\n                        <li fd-option [value]=\"column.key\">\n                            {{ column.label }}\n                        </li>\n                    }\n                </fd-select>\n\n                <fd-checkbox\n                    class=\"group-row__checkbox\"\n                    [ngModel]=\"rule.showAsColumn\"\n                    (ngModelChange)=\"_onRuleShowAsColumnChange(rule, $event)\"\n                    [label]=\"('platformTable.P13GroupDialogShowFieldAsColumnCheckboxLabel' | fdTranslate)()\"\n                ></fd-checkbox>\n\n                <div class=\"group-row__actions\">\n                    <button\n                        fd-button\n                        fdType=\"transparent\"\n                        glyph=\"sys-cancel\"\n                        [attr.aria-label]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n                        [title]=\"('platformTable.P13GroupDialogRemoveGroupBtnTitle' | fdTranslate)()\"\n                        (click)=\"_removeRule(rule)\"\n                        [disabled]=\"!rule.columnKey\"\n                    ></button>\n\n                    <button\n                        fd-button\n                        fdType=\"transparent\"\n                        glyph=\"add\"\n                        [attr.aria-label]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n                        [title]=\"('platformTable.P13GroupDialogAddNewGroupBtnTitle' | fdTranslate)()\"\n                        (click)=\"_addNew(i)\"\n                        [disabled]=\"rules.length >= columns.length || !rule.columnKey\"\n                    ></button>\n                </div>\n            </div>\n        }\n    </fd-dialog-body>\n\n    <fd-dialog-footer>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformTable.P13GroupDialogConfirmationBtnLabel' | fdTranslate)()\"\n            (click)=\"confirm()\"\n        ></fd-button-bar>\n\n        <fd-button-bar\n            fdType=\"transparent\"\n            [label]=\"('platformTable.P13GroupDialogCancelBtnLabel' | fdTranslate)()\"\n            (click)=\"cancel()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Columns Settings.\n *\n */\n@Component({\n    selector: 'fdp-table-p13-columns',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableP13ColumnsComponent {}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Personalization Dialog Filter Settings.\n */\n@Component({\n    selector: 'fdp-table-p13-filter',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableP13FilterComponent {\n    /**\n     * Function for handling validation of the filter rules in the table personalization dialog.\n     */\n    @Input()\n    validator: ((rules: CollectionFilter[]) => boolean) | undefined;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Group Settings.\n *\n */\n@Component({\n    selector: 'fdp-table-p13-group',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableP13GroupComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Personalization Dialog Sort Settings.\n *\n */\n@Component({\n    selector: 'fdp-table-p13-sort',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableP13SortComponent {}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Pipe,\n    PipeTransform,\n    ViewEncapsulation,\n    forwardRef,\n    signal\n} from '@angular/core';\nimport {\n    CollectionSort,\n    SortDirection,\n    TableDialogCommonData,\n    getUniqueListValuesByKey\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { DisabledBehaviorDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n    BarElementDirective,\n    BarLeftDirective,\n    BarRightDirective,\n    ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\n\nexport interface SortDialogColumn {\n    label: string;\n    key: string;\n}\n\nexport interface SortDialogData extends TableDialogCommonData {\n    collectionSort: CollectionSort[];\n    columns: SortDialogColumn[];\n}\n\nexport interface SortDialogResultData {\n    collectionSort: CollectionSort[];\n}\n\nexport interface SortRule {\n    columnKey: string | null;\n    direction: SortDirection;\n}\n\nconst NOT_SELECTED_OPTION_VALUE = null;\n\nclass ValidatedSortRule implements SortRule {\n    get isValid(): boolean {\n        return this.columnKey !== NOT_SELECTED_OPTION_VALUE && this.direction !== NOT_SELECTED_OPTION_VALUE;\n    }\n\n    constructor(\n        /** Column key the rule belongs to */\n        public columnKey: string | null = NOT_SELECTED_OPTION_VALUE,\n        /** Sort direction */\n        public direction: SortDirection = SortDirection.ASC\n    ) {}\n}\n\n@Component({\n    templateUrl: './sorting.component.html',\n    styleUrl: './sorting.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: RESETTABLE_TOKEN, useExisting: P13SortingDialogComponent }],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        BarLeftDirective,\n        BarElementDirective,\n        TitleComponent,\n        BarRightDirective,\n        ResetButtonComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        SelectComponent,\n        OptionComponent,\n        ButtonComponent,\n        DisabledBehaviorDirective,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        FdTranslatePipe,\n        forwardRef(() => GetAvailableSortColumnsPipe)\n    ]\n})\nexport class P13SortingDialogComponent implements Resettable {\n    /** Table columns available for sorting */\n    readonly columns: SortDialogColumn[] = [];\n\n    /** Indicates when reset command is available */\n    readonly isResetAvailable$ = signal(false);\n\n    /** @hidden */\n    readonly SORT_DIRECTION = SortDirection;\n\n    /** Sort rules to render */\n    rules: ValidatedSortRule[] = [];\n\n    /** @hidden */\n    constructor(\n        public dialogRef: DialogRef<SortDialogData>,\n        private cdr: ChangeDetectorRef\n    ) {\n        const { columns, collectionSort } = this.dialogRef.data;\n\n        this.columns = columns || [];\n\n        this._initiateRules(collectionSort);\n    }\n\n    /** Reset changes to the initial state */\n    reset(): void {\n        this._initiateRules();\n        this.isResetAvailable$.set(false);\n    }\n\n    /** Close dialog */\n    cancel(): void {\n        this.dialogRef.close(null);\n    }\n\n    /** Confirm changes and close dialog */\n    confirm(): void {\n        const collectionSort = this._getCollectionSortFromSortRules(this._getUniqueRules(this.rules));\n        const result: SortDialogResultData = { collectionSort };\n        this.dialogRef.close(result);\n    }\n\n    /** @hidden */\n    _removeRule(rule: ValidatedSortRule): void {\n        this.rules = this.rules.filter((_rule) => _rule !== rule);\n\n        // Keep at least one item in the list\n        if (this.rules.length === 0) {\n            this.rules.push(new ValidatedSortRule());\n        }\n\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    _addNew(index: number): void {\n        this.rules.splice(index + 1, 0, new ValidatedSortRule());\n    }\n\n    /** @hidden */\n    _onRuleColumnKeyChange(rule: ValidatedSortRule, columnKey: string): void {\n        rule.columnKey = columnKey;\n        this._recalculateResetAvailability();\n        this.cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _onRuleDirectionChange(rule: ValidatedSortRule, direction: SortDirection): void {\n        rule.direction = direction;\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    _recalculateResetAvailability(): void {\n        const hasOnlyOneEmptyRule = this.rules.length === 1 && !this.rules[0].isValid;\n        this.isResetAvailable$.set(!hasOnlyOneEmptyRule);\n    }\n\n    /** @hidden */\n    _trackByColumnKey(index: number, rule: ValidatedSortRule): string | null {\n        return rule.columnKey;\n    }\n\n    /** @hidden */\n    private _initiateRules(collectionSort?: CollectionSort[]): void {\n        this.rules = this._createRules(collectionSort);\n\n        // Keep at least one item in the list\n        if (this.rules.length === 0) {\n            this.rules.push(new ValidatedSortRule());\n        }\n\n        this._recalculateResetAvailability();\n    }\n\n    /** @hidden */\n    private _createRules(collectionSort: CollectionSort[] = []): ValidatedSortRule[] {\n        return collectionSort.map(({ field, direction }): ValidatedSortRule => new ValidatedSortRule(field, direction));\n    }\n\n    /** @hidden */\n    private _getCollectionSortFromSortRules(rules = this.rules): CollectionSort[] {\n        return rules.filter(this._isRuleValid).map(\n            ({ columnKey, direction }): CollectionSort => ({\n                field: columnKey,\n                direction\n            })\n        );\n    }\n\n    /** @hidden */\n    private _getUniqueRules(rules: ValidatedSortRule[]): ValidatedSortRule[] {\n        return getUniqueListValuesByKey(rules, 'columnKey');\n    }\n\n    /** @hidden */\n    private _isRuleValid = (rule: ValidatedSortRule): boolean => rule?.isValid;\n}\n\n@Pipe({\n    name: 'getAvailableSortColumns',\n    pure: false,\n    standalone: true\n})\nexport class GetAvailableSortColumnsPipe implements PipeTransform {\n    /** @hidden */\n    transform(columns: SortDialogColumn[], rules: SortRule[], currentKey: string | null): SortDialogColumn[] {\n        const usedKeys = new Set(rules.map((r) => r.columnKey));\n        return columns.filter((c) => !usedKeys.has(c.key) || currentKey === c.key);\n    }\n}\n","<fd-dialog class=\"fdp-table-p13-sorting-dialog\">\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <div fd-bar-left>\n                <fd-bar-element>\n                    <h4 fd-title [headerSize]=\"4\">\n                        {{ ('platformTable.P13SortDialogHeader' | fdTranslate)() }}\n                    </h4>\n                </fd-bar-element>\n            </div>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <fdp-table-reset-button></fdp-table-reset-button>\n                </fd-bar-element>\n            </div>\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body>\n        @for (rule of rules; track _trackByColumnKey(i, rule); let i = $index) {\n            <div class=\"sort-row\">\n                <fd-select\n                    class=\"sort-row__select\"\n                    [value]=\"rule.columnKey\"\n                    (valueChange)=\"_onRuleColumnKeyChange(rule, $event)\"\n                    [placeholder]=\"('platformTable.P13SortDialogNoneSelectedColumn' | fdTranslate)()\"\n                >\n                    @for (column of columns | getAvailableSortColumns: rules : rule.columnKey; track column) {\n                        <li fd-option [value]=\"column.key\">\n                            {{ column.label }}\n                        </li>\n                    }\n                </fd-select>\n                <fd-select\n                    class=\"sort-row__select\"\n                    [value]=\"rule.direction\"\n                    (valueChange)=\"_onRuleDirectionChange(rule, $event)\"\n                    [placeholder]=\"('platformTable.P13SortDialogNoneSelectedSorting' | fdTranslate)()\"\n                >\n                    <li fd-option [value]=\"SORT_DIRECTION.ASC\">\n                        {{ ('platformTable.P13SortDialogSortOrderSelectOptionAsc' | fdTranslate)() }}\n                    </li>\n                    <li fd-option [value]=\"SORT_DIRECTION.DESC\">\n                        {{ ('platformTable.P13SortDialogSortOrderSelectOptionDesc' | fdTranslate)() }}\n                    </li>\n                </fd-select>\n                <div class=\"sort-row__actions\">\n                    <button\n                        fd-button\n                        fdType=\"transparent\"\n                        glyph=\"sys-cancel\"\n                        [attr.aria-label]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n                        [title]=\"('platformTable.P13SortDialogRemoveSortBtnTitle' | fdTranslate)()\"\n                        (click)=\"_removeRule(rule)\"\n                    ></button>\n                    <button\n                        fd-button\n                        [fdkDisabled]=\"rules.length === columns.length\"\n                        fdType=\"transparent\"\n                        glyph=\"add\"\n                        [attr.aria-label]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n                        [title]=\"('platformTable.P13SortDialogAddNewSortBtnTitle' | fdTranslate)()\"\n                        (click)=\"_addNew(i)\"\n                    ></button>\n                </div>\n            </div>\n        }\n    </fd-dialog-body>\n    <fd-dialog-footer>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformTable.P13SortDialogConfirmationBtnLabel' | fdTranslate)()\"\n            (click)=\"confirm()\"\n        ></fd-button-bar>\n        <fd-button-bar\n            fdType=\"transparent\"\n            [label]=\"('platformTable.P13SortDialogCancelBtnLabel' | fdTranslate)()\"\n            (click)=\"cancel()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    Output\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\n\nimport {\n    CollectionFilter,\n    CollectionGroup,\n    CollectionSort,\n    Table,\n    TableColumn,\n    TableDialogCommonData,\n    TableState\n} from '@fundamental-ngx/platform/table-helpers';\n\nimport { TableP13ColumnsComponent } from './table-p13-columns.component';\nimport { TableP13FilterComponent } from './table-p13-filter.component';\nimport { TableP13GroupComponent } from './table-p13-group.component';\nimport { TableP13SortComponent } from './table-p13-sort.component';\n\nimport { VisibleColumnType } from './columns/columns.component';\n\nimport { ColumnsDialogData, ColumnsDialogResultData, P13ColumnsDialogComponent } from './columns/columns.component';\nimport { FilterDialogData, FilterDialogResultData, P13FilteringDialogComponent } from './filtering/filtering.component';\nimport { GroupDialogData, GroupDialogResultData, P13GroupingDialogComponent } from './grouping/grouping.component';\nimport { P13SortingDialogComponent, SortDialogData, SortDialogResultData } from './sorting/sorting.component';\n\nconst dialogConfig: DialogConfig = {\n    responsivePadding: true,\n    verticalPadding: true,\n    minWidth: '30rem',\n    /** 88px it's the header + footer height */\n    bodyMinHeight: 'calc(50vh - 88px)'\n};\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-p13-dialog [table]=\"myTable\">\n *   <!-- Sort Panel -->\n *   <fdp-table-p13-sort></fdp-table-p13-sort>\n *\n *   <!-- Filter Panel -->\n *   <fdp-table-p13-filter></fdp-table-p13-filter>\n *\n *   <!-- Group Panel -->\n *   <fdp-table-p13-group></fdp-table-p13-group>\n *\n *   <!-- Columns Panel -->\n *   <fdp-table-p13-columns></fdp-table-p13-columns>\n * </fdp-table-p13-dialog>\n * ```\n * */\n@Component({\n    selector: 'fdp-table-p13-dialog',\n    template: '',\n    styles: [\n        `\n            :host {\n                z-index: 999;\n            }\n        `\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class TableP13DialogComponent implements OnDestroy {\n    /** Reference to table component. */\n    @Input()\n    set table(table: Table) {\n        this._setTable(table);\n    }\n    get table(): Table {\n        return this._table;\n    }\n\n    /** Event emitted when dialog is closed. */\n    @Output()\n    dialogClosed = new EventEmitter<string[]>();\n\n    /** @hidden */\n    @ContentChild(TableP13SortComponent)\n    sort: TableP13SortComponent;\n\n    /** @hidden */\n    @ContentChild(TableP13FilterComponent)\n    filter: TableP13FilterComponent;\n\n    /** @hidden */\n    @ContentChild(TableP13GroupComponent)\n    group: TableP13GroupComponent;\n\n    /** @hidden */\n    @ContentChild(TableP13ColumnsComponent)\n    columns: TableP13ColumnsComponent;\n\n    /** @hidden */\n    _table: Table;\n\n    /** @hidden */\n    _dialogRef: DialogRef<TableDialogCommonData, any>;\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    private _tableSubscriptions = new Subscription();\n\n    /** @hidden */\n    private _columnOrder: VisibleColumnType[];\n\n    /** @hidden */\n    constructor(private readonly _dialogService: DialogService) {}\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n        this._unsubscribeFromTable();\n    }\n\n    /** Open Sort Settings Dialog */\n    showSortingSettings(): void {\n        const state = this._getTableState();\n        const columns = this._getTableColumns().filter(({ sortable }) => sortable);\n        const sortBy = state.sortBy;\n        const dialogData: SortDialogData = {\n            columns: columns.map(({ label, key }) => ({ label, key })),\n            collectionSort: sortBy\n        };\n\n        // dismiss any open dialog, before opening a new one\n        if (this._dialogRef) {\n            this._dialogRef.dismiss();\n        }\n\n        this._dialogRef = this._dialogService.open(\n            P13SortingDialogComponent,\n            {\n                ...dialogConfig,\n                data: dialogData\n            },\n            this.table.injector\n        );\n\n        this._subscriptions.add(\n            this._dialogRef.afterClosed\n                .pipe(filter((result) => !!result))\n                .subscribe(({ collectionSort }: SortDialogResultData) => {\n                    this._applySorting(collectionSort);\n                })\n        );\n    }\n\n    /** Open Filtering Settings Dialog */\n    showFilteringSettings(): void {\n        const state = this._getTableState();\n        const columns = this._getTableColumns();\n        const filterBy = state?.filterBy;\n        const dialogData: FilterDialogData = {\n            // add filterSelectOptions to be sent with the data\n            columns: columns.map(({ label, key, dataType, filterable, filterSelectOptions }) => ({\n                label,\n                key,\n                dataType,\n                filterable,\n                filterSelectOptions\n            })),\n            collectionFilter: filterBy\n        };\n\n        if (this.filter && this.filter.validator) {\n            dialogData.validator = this.filter.validator;\n        }\n\n        // dismiss any open dialog, before opening a new one\n        if (this._dialogRef) {\n            this._dialogRef.dismiss();\n        }\n\n        this._dialogRef = this._dialogService.open(\n            P13FilteringDialogComponent,\n            {\n                ...dialogConfig,\n                disablePaddings: true,\n                width: '50rem',\n                data: dialogData\n            },\n            this.table.injector\n        );\n\n        this._subscriptions.add(\n            this._dialogRef.afterClosed\n                .pipe(filter((result) => !!result))\n                .subscribe(({ collectionFilter }: FilterDialogResultData) => {\n                    this._applyFiltering(collectionFilter);\n                })\n        );\n    }\n\n    /** Open Grouping Settings Dialog */\n    showGroupingSettings(): void {\n        const state = this._getTableState();\n        const columns = this._getTableColumns();\n        const visibleColumns = state.columns;\n        const groupBy = state.groupBy;\n        const dialogData: GroupDialogData = {\n            columns: columns\n                // We can group by visible columns only\n                .filter(({ name }) => visibleColumns.includes(name))\n                .filter(({ groupable }) => groupable)\n                .map(({ label, key }) => ({ label, key })),\n            collectionGroup: groupBy\n        };\n\n        // dismiss any open dialog, before opening a new one\n        if (this._dialogRef) {\n            this._dialogRef.dismiss();\n        }\n\n        this._dialogRef = this._dialogService.open(\n            P13GroupingDialogComponent,\n            {\n                ...dialogConfig,\n                data: dialogData\n            },\n            this.table.injector\n        );\n\n        this._subscriptions.add(\n            this._dialogRef.afterClosed\n                .pipe(filter((result) => !!result))\n                .subscribe(({ collectionGroup }: GroupDialogResultData) => {\n                    this._applyGrouping(collectionGroup);\n                })\n        );\n    }\n\n    /** Open Columns Settings Dialog */\n    showColumnsSettings(): void {\n        const state = this._getTableState();\n        const columns = this._getTableColumns();\n        const visibleColumns = state.columns;\n        const dialogData: ColumnsDialogData = {\n            availableColumns: columns.map(({ label, name }) => ({ label, key: name })),\n            visibleColumns\n        };\n\n        if (this._columnOrder && this._columnOrder.length) {\n            dialogData.availableColumns.sort(\n                (a, b) => this._columnOrder.indexOf(a.key) - this._columnOrder.indexOf(b.key)\n            );\n        }\n\n        // dismiss any open dialog, before opening a new one\n        if (this._dialogRef) {\n            this._dialogRef.dismiss();\n        }\n\n        this._dialogRef = this._dialogService.open(\n            P13ColumnsDialogComponent,\n            {\n                ...dialogConfig,\n                disablePaddings: true,\n                minWidth: '35rem',\n                data: dialogData\n            },\n            this.table.injector\n        );\n\n        this._subscriptions.add(\n            this._dialogRef.afterClosed\n                .pipe(filter((result) => !!result))\n                .subscribe(({ visibleColumns: result, columnOrder }: ColumnsDialogResultData) => {\n                    if (columnOrder) {\n                        this._columnOrder = columnOrder;\n                    }\n                    this.dialogClosed.emit(result);\n                    this._applyColumns(result);\n                })\n        );\n    }\n\n    /** @hidden */\n    private _setTable(table: Table): void {\n        this._table = table;\n\n        this._unsubscribeFromTable();\n\n        if (this._table) {\n            this._subscribeToTable();\n        }\n    }\n\n    /** @hidden */\n    private _subscribeToTable(): void {\n        this._listenToTableTriggersToOpenDialogs();\n        this._listenToTableColumns();\n    }\n\n    /** @hidden */\n    private _listenToTableTriggersToOpenDialogs(): void {\n        this._tableSubscriptions.add(this._table.openTableSortSettings.subscribe(() => this.showSortingSettings()));\n        this._tableSubscriptions.add(this._table.openTableFilterSettings.subscribe(() => this.showFilteringSettings()));\n        this._tableSubscriptions.add(this._table.openTableGroupSettings.subscribe(() => this.showGroupingSettings()));\n        this._tableSubscriptions.add(this._table.openTableColumnSettings.subscribe(() => this.showColumnsSettings()));\n    }\n\n    /** @hidden */\n    private _listenToTableColumns(): void {\n        this._tableSubscriptions.add(\n            this._table.tableColumnsStream.subscribe((columns: TableColumn[]) => {\n                this._table?.showSortSettingsInToolbar(columns.some(({ sortable }) => sortable));\n\n                this._table?.showGroupSettingsInToolbar(columns.some(({ groupable }) => groupable));\n\n                this._table?.showColumnSettingsInToolbar(columns.length > 0);\n\n                this._table?.showFilterSettingsInToolbar(columns.some(({ filterable }) => filterable));\n\n                this._table?.setHeaderColumnFilteringDisabled(columns.some(({ filterable }) => filterable));\n            })\n        );\n    }\n\n    /** @hidden */\n    private _getTableState(): TableState {\n        return this._table?.getTableState();\n    }\n\n    /** @hidden */\n    private _getTableColumns(): TableColumn[] {\n        return this._table?.getTableColumns() || [];\n    }\n\n    /** @hidden */\n    private _applySorting(collectionSort: CollectionSort[]): void {\n        this._table?.sort(collectionSort);\n    }\n\n    /** @hidden */\n    private _applyFiltering(filters: CollectionFilter[]): void {\n        this._table?.filter(filters);\n    }\n\n    /** @hidden */\n    private _applyGrouping(collectionGroup: CollectionGroup[]): void {\n        this._table?.group(collectionGroup);\n    }\n\n    /** @hidden */\n    private _applyColumns(columns: string[]): void {\n        this._table?.setColumns(columns);\n    }\n\n    /** @hidden */\n    private _unsubscribeFromTable(): void {\n        this._tableSubscriptions.unsubscribe();\n        this._tableSubscriptions = new Subscription();\n    }\n}\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface TableToolbarInterface {\n    tableToolbarTitleId: string;\n    contentTemplateRef: TemplateRef<any>;\n}\n\n/** @deprecated Use TableToolbarInterface instead */\nexport type TableToolbarWithTemplate = TableToolbarInterface;\n\n/**\n * Used to provide a table-toolbar to the table component without causing a circular dependency.\n */\nexport const TABLE_TOOLBAR = new InjectionToken<any>('PLATFORM_TABLE_TOOLBAR');\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n/**\n * The component that represents a table toolbar actions.\n * ```html\n * <fdp-table-toolbar-actions>\n *  <fdp-button label=\"Action One\"></fdp-button>\n *  <fdp-button label=\"Action Two\"></fdp-button>\n * </fdp-table-toolbar-actions>\n * ```\n * */\n@Component({\n    selector: 'fdp-table-toolbar-actions',\n    template: `\n        <ng-template>\n            <ng-content></ng-content>\n        </ng-template>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableToolbarActionsComponent {\n    /** @hidden */\n    @ViewChild(TemplateRef)\n    contentTemplateRef: TemplateRef<any>;\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'fdp-table-toolbar-left-actions',\n    template: `\n        <ng-template>\n            <ng-content></ng-content>\n        </ng-template>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableToolbarLeftActionsComponent {\n    /** @hidden */\n    @ViewChild(TemplateRef)\n    _contentTemplateRef: TemplateRef<any>;\n}\n","import {\n    AfterViewChecked,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    DestroyRef,\n    Directive,\n    EventEmitter,\n    Input,\n    Output,\n    Signal,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation,\n    computed,\n    inject,\n    input,\n    signal\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { HeadingLevel } from '@fundamental-ngx/core/shared';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport {\n    ToolbarComponent,\n    ToolbarItemDirective,\n    ToolbarLabelDirective,\n    ToolbarSeparatorComponent,\n    ToolbarSpacerDirective\n} from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent, SearchInput, SuggestionItem } from '@fundamental-ngx/platform/search-field';\nimport { Table, TableService } from '@fundamental-ngx/platform/table-helpers';\nimport { TABLE_TOOLBAR, TableToolbarInterface } from './table-toolbar';\nimport { TableToolbarActionsComponent } from './table-toolbar-actions.component';\nimport { TableToolbarLeftActionsComponent } from './table-toolbar-left-actions.component';\n\nexport interface TableAppliedFilter {\n    columnName: string;\n    params: string;\n}\n\nexport interface ToolbarContext {\n    counter: Signal<number>;\n    sortable: Signal<boolean>;\n    filterable: Signal<boolean>;\n    groupable: Signal<boolean>;\n    columns: Signal<boolean>;\n    settings: Signal<boolean>;\n    hasAnyActions: Signal<boolean>;\n    appliedFilters: Signal<TableAppliedFilter[]>;\n}\n\n/** Context provided to the titleTemplate. */\nexport interface TableToolbarTitleTemplateContext {\n    /** Item count signal. */\n    counter: Signal<number>;\n}\n\nexport type EditMode = 'none' | 'inline';\n\nlet tableToolbarTitleUniqueId = 0;\nlet tableToolbarUniqueId = 0;\n\n@Directive({\n    selector: '[fdpTableToolbarTemplate]',\n    standalone: true\n})\nexport class TableToolbarTemplateDirective {\n    /** @hidden */\n    readonly templateRef = inject<TemplateRef<ToolbarContext>>(TemplateRef);\n\n    /** @hidden */\n    static ngTemplateContextGuard(\n        _directive: TableToolbarTemplateDirective,\n        context: unknown\n    ): context is ToolbarContext {\n        return true;\n    }\n}\n\n/**\n * The component that represents a table toolbar.\n *\n * ```html\n * <fdp-table-toolbar\n *   title=\"Order Line Items\"\n *   [hideItemCount]=\"false\">\n * </fdp-table-toolbar>\n * ```\n * */\n\n@Component({\n    selector: 'fdp-table-toolbar',\n    templateUrl: './table-toolbar.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }],\n    imports: [\n        ToolbarComponent,\n        ToolbarItemDirective,\n        ToolbarSeparatorComponent,\n        NgTemplateOutlet,\n        ToolbarSpacerDirective,\n        SearchFieldComponent,\n        ButtonComponent,\n        AsyncPipe,\n        FdTranslatePipe,\n        TableToolbarTemplateDirective,\n        ToolbarLabelDirective,\n        ContentDensityDirective,\n        TitleComponent\n    ]\n})\nexport class TableToolbarComponent implements TableToolbarInterface, AfterViewChecked {\n    /**\n     * Whether the toolbar should hide elements in popover when they overflow.\n     * */\n    @Input()\n    shouldOverflow = true;\n\n    /** Table title. */\n    @Input()\n    title: string;\n\n    /** Aria label for the search field. */\n    @Input()\n    searchFieldAriaLabel: Nullable<string>;\n\n    /** Toggle to show table item count. */\n    @Input()\n    hideItemCount = false;\n\n    /** Toggle to show search input. */\n    @Input()\n    hideSearchInput = false;\n\n    /** Set a customized placeholder */\n    @Input()\n    searchFieldPlaceholder: string;\n\n    /** Toggle to expand and collapse all feature */\n    @Input()\n    showExpandCollapseButtons = false;\n    /** Suggestions for search field. */\n    @Input()\n    searchSuggestions: SuggestionItem[] = [];\n\n    /** Table rows edit/add mode. */\n    @Input()\n    editMode: EditMode = 'none';\n\n    /** Whether display Refresh button in the search field */\n    @Input()\n    disableRefresh = false;\n\n    /** Whether display search button in the search field */\n    @Input()\n    disableSearch = false;\n\n    /** Toolbar Aria-label attribute. */\n    @Input()\n    ariaLabel: string;\n\n    /** Toolbar Aria-labelledby attribute. */\n    @Input()\n    ariaLabelledBy: string;\n\n    /** Toolbar Aria-describedby attribute. */\n    @Input()\n    ariaDescribedBy: string;\n\n    /** Toolbar Aria-orientation attribute. */\n    @Input()\n    ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n    /**\n     * The ID of the toolbar\n     * */\n    @Input()\n    id = `fd-table-toolbar-${tableToolbarUniqueId++}`;\n\n    /** Search field input text. */\n    @Input()\n    set searchFieldInputText(text: string) {\n        this._searchInputText = text;\n        this.submitSearch({ text, category: null });\n    }\n    get searchFieldInputText(): string {\n        return this._searchInputText;\n    }\n\n    /** Event emitted when the search field input is changed. */\n    @Output()\n    searchFieldInputChange = new EventEmitter<string>();\n\n    /** @hidden */\n    @ContentChild(TableToolbarActionsComponent)\n    tableToolbarActionsComponent: TableToolbarActionsComponent;\n\n    /** @hidden */\n    @ContentChild(TableToolbarLeftActionsComponent)\n    _tableToolbarLeftActionsComponent: TableToolbarLeftActionsComponent;\n\n    /** @hidden */\n    @ViewChild(TemplateRef)\n    contentTemplateRef: TemplateRef<any>;\n\n    /** @hidden */\n    tableToolbarTitleId: string = 'fd-table-toolbar-title-' + tableToolbarTitleUniqueId++;\n\n    /** @hidden */\n    _showSaveButton = false;\n\n    /** @hidden */\n    _searchInputText = '';\n\n    /**\n     * Custom title template. When provided, it replaces the default string title.\n     * The template context provides a `counter` signal with the current item count.\n     *\n     * ```html\n     * <fdp-table-toolbar [titleTemplate]=\"customTitleTpl\">\n     *   <ng-template #customTitleTpl let-counter=\"counter\">\n     *     <fd-icon glyph=\"product\"></fd-icon> Products ({{ counter() }})\n     *   </ng-template>\n     * </fdp-table-toolbar>\n     * ```\n     */\n    titleTemplate = input<TemplateRef<TableToolbarTitleTemplateContext> | null>(null);\n\n    /**\n     * Heading level of the table toolbar title.\n     */\n    headingLevel = input<HeadingLevel>(2);\n\n    /** @hidden */\n    readonly headingLevelParsed = computed(() => {\n        const level = this.headingLevel();\n        if (typeof level === 'number') {\n            return level;\n        } else if (typeof level === 'string') {\n            return Number.parseInt(level.replace(/\\D/g, ''), 10);\n        }\n        return 2;\n    });\n\n    /** @hidden */\n    readonly tableLoading$: Observable<boolean> = inject(TableService).tableLoading$;\n\n    /** @hidden Title text extracted from titleTemplate for accessibility. */\n    protected readonly titleText = signal<string>('');\n\n    /** @hidden */\n    private _titleObserver: MutationObserver | undefined;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(\n        private _tableService: TableService,\n        private readonly _table: Table\n    ) {\n        this._listenToTableEvents();\n    }\n\n    /** @hidden */\n    ngAfterViewChecked(): void {\n        // Set up observer once the element exists in the DOM\n        if (!this._titleObserver) {\n            this._setupTitleObserver();\n        }\n    }\n\n    /** @hidden */\n    submitSearch(search: SearchInput): void {\n        this._table.search(search);\n    }\n\n    /** @hidden */\n    searchInputChanged(event: SearchInput): void {\n        this.searchFieldInputChange.emit(event.text);\n    }\n\n    /** @hidden */\n    openSorting(): void {\n        this._table.openTableSortSettings.emit();\n    }\n\n    /** @hidden */\n    openFiltering(): void {\n        this._table.openTableFilterSettings.emit();\n    }\n\n    /** @hidden */\n    openGrouping(): void {\n        this._table.openTableGroupSettings.emit();\n    }\n\n    /** @hidden */\n    openColumns(): void {\n        this._table.openTableColumnSettings.emit();\n    }\n\n    /** @hidden */\n    _addRow(): void {\n        this._table.addRow();\n    }\n\n    /** @hidden */\n    _saveRows(): void {\n        this._table.saveRows();\n    }\n\n    /** @hidden */\n    _cancelEditing(): void {\n        this._table.cancelEditing();\n    }\n\n    /** @hidden */\n    _expandAll(): void {\n        this._table.expandAll();\n    }\n\n    /** @hidden */\n    _formatAppliedFilters(appliedFilters: { columnName: string; params: string }[]): string {\n        return appliedFilters\n            .map((filter, index) => {\n                const separator = index < appliedFilters.length - 1 ? ', ' : '';\n                return `${filter.columnName} (${filter.params})${separator}`;\n            })\n            .join('');\n    }\n\n    /** @hidden */\n    _closeFilterToolbar(): void {\n        this._tableService.resetFilters();\n    }\n\n    /** @hidden */\n    _collapseAll(): void {\n        this._table.collapseAll();\n    }\n\n    /** @hidden */\n    private _listenToTableEvents(): void {\n        this._table.emptyRowAdded.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._showSaveButton = true;\n        });\n\n        this._table.save.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._showSaveButton = false;\n        });\n\n        this._table.cancel.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._showSaveButton = false;\n        });\n\n        this._table.presetChanged.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((state) => {\n            this._searchInputText = state.searchInput?.text ?? '';\n        });\n    }\n\n    /** @hidden Sets up a MutationObserver to watch for title content changes. */\n    private _setupTitleObserver(): void {\n        const titleElement = document.getElementById(this.tableToolbarTitleId);\n        if (titleElement) {\n            this._updateTitleText(titleElement);\n            this._titleObserver = new MutationObserver(() => this._updateTitleText(titleElement));\n            this._titleObserver.observe(titleElement, {\n                childList: true,\n                subtree: true,\n                characterData: true\n            });\n            this._destroyRef.onDestroy(() => this._titleObserver?.disconnect());\n        }\n    }\n\n    /** @hidden Updates the title text from the rendered title element. */\n    private _updateTitleText(titleElement: HTMLElement): void {\n        const text = titleElement.textContent?.trim() || '';\n        if (text !== this.titleText()) {\n            this.titleText.set(text);\n        }\n    }\n}\n","<ng-template\n    fdpTableToolbarTemplate\n    let-counter=\"counter\"\n    let-sortable=\"sortable\"\n    let-filterable=\"filterable\"\n    let-groupable=\"groupable\"\n    let-columns=\"columns\"\n    let-settings=\"settings\"\n    let-hasAnyActions=\"hasAnyActions\"\n    let-appliedFilters=\"appliedFilters\"\n>\n    <fd-toolbar\n        fdType=\"transparent\"\n        [titleId]=\"tableToolbarTitleId\"\n        [title]=\"titleTemplate() ? '' : title && !hideItemCount ? title + ' (' + counter() + ')' : title\"\n        [shouldOverflow]=\"shouldOverflow\"\n        [headingLevel]=\"headingLevel()\"\n        [ariaLabel]=\"ariaLabel\"\n        [id]=\"id\"\n        [ariaLabelledBy]=\"ariaLabelledBy\"\n        [ariaDescribedBy]=\"ariaDescribedBy\"\n        [ariaOrientation]=\"ariaOrientation\"\n    >\n        @if (titleTemplate()) {\n            <span\n                fd-title\n                role=\"heading\"\n                [headerSize]=\"4\"\n                [attr.aria-level]=\"headingLevelParsed()\"\n                [attr.title]=\"titleText()\"\n                [attr.aria-label]=\"titleText()\"\n                class=\"fd-toolbar__title fd-toolbar__title--truncate\"\n                [id]=\"tableToolbarTitleId\"\n            >\n                <ng-template\n                    [ngTemplateOutlet]=\"titleTemplate()\"\n                    [ngTemplateOutletContext]=\"{ counter: counter }\"\n                ></ng-template>\n            </span>\n        }\n        @if (_tableToolbarLeftActionsComponent) {\n            <div fd-toolbar-item class=\"fd-toolbar__group\">\n                @if (!!title || !!titleTemplate() || !hideItemCount) {\n                    <fd-toolbar-separator></fd-toolbar-separator>\n                }\n                <ng-template [ngTemplateOutlet]=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-template>\n            </div>\n        }\n        <fd-toolbar-spacer></fd-toolbar-spacer>\n        @if (!hideSearchInput) {\n            <fdp-search-field\n                fd-toolbar-item\n                [style.min-width.rem]=\"15.5\"\n                [placeholder]=\"\n                    searchFieldPlaceholder\n                        ? searchFieldPlaceholder\n                        : ('platformTable.toolbarSearchPlaceholder' | fdTranslate)()\n                \"\n                [inputText]=\"_searchInputText\"\n                [disabled]=\"!!(tableLoading$ | async)\"\n                [suggestions]=\"searchSuggestions\"\n                [disableRefresh]=\"disableRefresh\"\n                [disableSearch]=\"disableSearch\"\n                [ariaLabel]=\"searchFieldAriaLabel\"\n                [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n                (searchSubmit)=\"submitSearch($event)\"\n                (cancelSearch)=\"submitSearch($event)\"\n                [disableSuggestionsFoundAnnouncer]=\"true\"\n                (inputChange)=\"searchInputChanged($event)\"\n            ></fdp-search-field>\n        }\n        @if (editMode !== 'none') {\n            <button\n                fd-button\n                fd-toolbar-item\n                [label]=\"('platformTable.toolbarActionCreateButtonLabel' | fdTranslate)()\"\n                (click)=\"_addRow()\"\n            ></button>\n            @if (_showSaveButton) {\n                @if (_showSaveButton) {\n                    <button\n                        fd-button\n                        fd-toolbar-item\n                        [label]=\"('platformTable.toolbarActionSaveButtonLabel' | fdTranslate)()\"\n                        (click)=\"_saveRows()\"\n                    ></button>\n                }\n                <fd-toolbar-separator></fd-toolbar-separator>\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    [label]=\"('platformTable.toolbarActionCancelButtonLabel' | fdTranslate)()\"\n                    (click)=\"_cancelEditing()\"\n                    fdType=\"transparent\"\n                ></button>\n            }\n            @if (tableToolbarActionsComponent || hasAnyActions()) {\n                <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n            }\n        }\n        @if (tableToolbarActionsComponent) {\n            <span fd-toolbar-item class=\"fdp-table-toolbar-actions\">\n                <ng-template [ngTemplateOutlet]=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-template>\n            </span>\n        }\n        @if (showExpandCollapseButtons || hasAnyActions()) {\n            @if (tableToolbarActionsComponent) {\n                <fd-toolbar-separator fd-toolbar-item></fd-toolbar-separator>\n            }\n            @if (showExpandCollapseButtons) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    glyph=\"expand-all\"\n                    (click)=\"_expandAll()\"\n                    [title]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                ></button>\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    glyph=\"collapse-all\"\n                    (click)=\"_collapseAll()\"\n                    [title]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                ></button>\n            }\n            @if (settings()) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    fdOverflowPriority=\"never\"\n                    glyph=\"action-settings\"\n                    [title]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                    aria-haspopup=\"dialog\"\n                    (click)=\"openSorting()\"\n                ></button>\n            }\n            @if (sortable()) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    glyph=\"sort\"\n                    [title]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                    aria-haspopup=\"dialog\"\n                    (click)=\"openSorting()\"\n                ></button>\n            }\n            @if (filterable()) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    glyph=\"filter\"\n                    [title]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                    aria-haspopup=\"dialog\"\n                    (click)=\"openFiltering()\"\n                ></button>\n            }\n            @if (groupable()) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    glyph=\"group-2\"\n                    [title]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                    aria-haspopup=\"dialog\"\n                    (click)=\"openGrouping()\"\n                ></button>\n            }\n            @if (columns()) {\n                <button\n                    fd-button\n                    fd-toolbar-item\n                    fdOverflowPriority=\"never\"\n                    glyph=\"action-settings\"\n                    [title]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n                    [ariaLabel]=\"('platformTable.toolbarActionColumnsButtonTitle' | fdTranslate)()\"\n                    fdType=\"transparent\"\n                    aria-haspopup=\"dialog\"\n                    (click)=\"openColumns()\"\n                ></button>\n            }\n        }\n    </fd-toolbar>\n    @if (appliedFilters().length) {\n        <fd-toolbar\n            fdType=\"info\"\n            class=\"fdp-table__applied-filters-toolbar\"\n            [active]=\"true\"\n            [titleId]=\"tableToolbarTitleId\"\n            [shouldOverflow]=\"shouldOverflow\"\n            [headingLevel]=\"headingLevel()\"\n        >\n            <label fd-toolbar-label>\n                {{ ('platformTable.filteredBy' | fdTranslate)() }}:\n                {{ _formatAppliedFilters(appliedFilters()) }}\n            </label>\n            <fd-toolbar-spacer></fd-toolbar-spacer>\n            <button\n                fdCompact\n                (click)=\"_closeFilterToolbar()\"\n                fd-button\n                fdType=\"transparent\"\n                glyph=\"decline\"\n                [title]=\"('platformTable.clearFilters' | fdTranslate)()\"\n                [ariaLabel]=\"('platformTable.clearFilters' | fdTranslate)()\"\n            ></button>\n        </fd-toolbar>\n    }\n</ng-template>\n","export const NOT_FILTERED_OPTION_VALUE = `table-filters-not-filtered-option-value-${Math.random()\n    .toString()\n    .slice(2, 5)}`;\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport {\n    FdpViewSettingsFilterCustomDef,\n    FilterType,\n    TableFilterSelectOption\n} from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * View settings dialog filter component.\n *\n * ```html\n * <!-- With custom form -->\n * <fdp-table-view-settings-filter\n *     column=\"name\"\n *     label=\"Name\"\n *     type=\"custom\">\n *         <ng-container *fdpViewSettingsFilterCustomDef=\"let model\">\n *             <label>Enter name:</label>\n *             <fdp-input type=\"text\" name=\"name\" [(ngModel)]=\"model.name\"></fdp-input>\n *         </ng-container>\n * </fdp-table-view-settings-filter>\n *\n * <!-- Single select -->\n * <fdp-table-view-settings-filter\n *     column=\"status\"\n *     label=\"Status\"\n *     type=\"single-select\"\n *     values=\"[{value: 'OUT_OF_STOCK', label: 'Out of stock'}, { value: 'AVAILABLE', label: 'Available'}]\">\n * </fdp-table-view-settings-filter>\n * ```\n *\n * */\n@Component({\n    selector: 'fdp-table-view-settings-filter',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableViewSettingsFilterComponent {\n    /** Table column name on which to filter. */\n    @Input()\n    column: string;\n\n    /** Label for the column. */\n    @Input()\n    label: string;\n\n    /**\n     * Type of filter interface.\n     * @type {'single-select' | 'multi-select' | 'custom' 'category'}\n     */\n    @Input()\n    type: FilterType;\n\n    /** Selection values for 'single-select' or 'multi-select' filter types. */\n    @Input()\n    values: TableFilterSelectOption[];\n\n    /** Custom filter template directive reference */\n    customFilterTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ContentChild(FdpViewSettingsFilterCustomDef)\n    set _filterCustomDef(filterCustomDef: FdpViewSettingsFilterCustomDef) {\n        this.customFilterTemplate = filterCustomDef?.templateRef;\n    }\n}\n","import {\n    afterEveryRender,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    inject,\n    Input,\n    Output\n} from '@angular/core';\nimport { CollectionFilter } from '@fundamental-ngx/platform/table-helpers';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    ContentDensityMode,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\n\n/**\n * Custom Select filter type.\n *\n * Used to render user's custom filter template\n *\n */\n\n@Component({\n    selector: 'fdp-filter-custom',\n    templateUrl: './filter-custom.component.html',\n    // afterEveryRender is used to detect mutations on the _value object after each render cycle.\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [contentDensityObserverProviders()],\n    imports: [NgTemplateOutlet]\n})\nexport class FilterCustomComponent {\n    /** ViewSettingsFilter options the filter is created from */\n    @Input()\n    filter: TableViewSettingsFilterComponent;\n\n    /** The filter model */\n    @Input()\n    set filterBy(filterBy: CollectionFilter | undefined) {\n        if (!filterBy?.value || Object.prototype.toString.call(filterBy?.value) !== '[object Object]') {\n            // force value to be an object\n            this._value = {};\n        } else {\n            this._value = { ...filterBy.value };\n        }\n\n        this._valueLastEmitted = { ...this._value };\n    }\n\n    /** Filter model change event */\n    @Output()\n    valueChange: EventEmitter<unknown> = new EventEmitter<unknown>();\n\n    /** Content Density, comes from table injector */\n    get contentDensity(): ContentDensityMode {\n        return this.contentDensityObserver.value;\n    }\n    /**\n     * @hidden\n     * Currently selected value\n     */\n    _value: Record<string, any>;\n\n    /**\n     * @hidden\n     * Last emitted value\n     */\n    _valueLastEmitted: Record<string, any>;\n\n    /** @hidden */\n    private readonly _cdr = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    constructor(private contentDensityObserver: ContentDensityObserver) {\n        afterEveryRender(() => this._checkValueChanges());\n    }\n\n    /** @hidden */\n    _checkValueChanges(): void {\n        try {\n            if (JSON.stringify(this._value) === JSON.stringify(this._valueLastEmitted)) {\n                return;\n            }\n\n            this._valueLastEmitted = { ...this._value };\n\n            this.valueChange.emit(this._value);\n            this._cdr.markForCheck();\n        } catch {}\n    }\n}\n","<ng-template\n    [ngTemplateOutlet]=\"filter.customFilterTemplate\"\n    [ngTemplateOutletContext]=\"{ $implicit: _value, valueChangeEmitter: valueChange, contentDensity: contentDensity }\"\n>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\n/**\n * Multi Select filter type.\n *\n */\n\ntype SelectableOption = TableFilterSelectOption & { selected: boolean };\n\n@Component({\n    selector: 'fdp-filter-multi-select',\n    templateUrl: './filter-multi-select.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [ListComponent, ListItemComponent, CheckboxComponent, FormsModule, ListTitleDirective]\n})\nexport class FilterMultiSelectComponent {\n    /** Selectable filter options */\n    @Input()\n    options: TableFilterSelectOption[] = [];\n\n    /** The filter model */\n    @Input()\n    set filterBy(filterBy: CollectionFilter | undefined) {\n        const filterByValue = filterBy?.value || [];\n        this._selectableOptions = this.options.map(\n            (option): SelectableOption => ({\n                ...option,\n                selected: filterByValue.includes(option.value)\n            })\n        );\n        this._updateValueBasedOnOptions();\n    }\n\n    /** Filter model change event */\n    @Output()\n    valueChange: EventEmitter<any[]> = new EventEmitter();\n\n    /**\n     * @hidden\n     * Currently selected values\n     */\n    _value: any[];\n\n    /** @hidden */\n    _selectableOptions: SelectableOption[];\n\n    /** @hidden */\n    _onSelectChange(option: SelectableOption, selected: boolean): void {\n        option.selected = selected;\n        this._updateValueBasedOnOptions();\n        this.valueChange.emit(this._value);\n    }\n\n    /** @hidden */\n    _updateValueBasedOnOptions(): void {\n        this._value = this._selectableOptions.filter(({ selected }) => selected).map(({ value }) => value);\n    }\n}\n","<ul fd-list [selection]=\"true\">\n    @for (option of _selectableOptions; track option) {\n        <li fd-list-item [selected]=\"option.selected\">\n            <fd-checkbox [ngModel]=\"option.selected\" (ngModelChange)=\"_onSelectChange(option, $event)\"></fd-checkbox>\n            <span fd-list-title>{{ option.label }}</span>\n        </li>\n    }\n</ul>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { CollectionFilter, TableFilterSelectOption } from '@fundamental-ngx/platform/table-helpers';\n\nimport { FormsModule } from '@angular/forms';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { NOT_FILTERED_OPTION_VALUE } from './constants';\n\n/**\n * Single Select filter type.\n *\n */\n\n@Component({\n    selector: 'fdp-filter-single-select',\n    templateUrl: './filter-single-select.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [ListComponent, ListItemComponent, RadioButtonComponent, FormsModule, ListTitleDirective, FdTranslatePipe]\n})\nexport class FilterSingleSelectComponent {\n    /** Selectable filter options */\n    @Input()\n    options: TableFilterSelectOption[] = [];\n\n    /** The filter model */\n    @Input()\n    set filterBy(filterBy: CollectionFilter | undefined) {\n        const value = filterBy?.value?.[0];\n        this._value = value === undefined ? NOT_FILTERED_OPTION_VALUE : value;\n    }\n\n    /** Filter model change event */\n    @Output()\n    valueChange: EventEmitter<any[]> = new EventEmitter();\n\n    /** @hidden */\n    readonly NOT_FILTERED_OPTION_VALUE = NOT_FILTERED_OPTION_VALUE;\n\n    /**\n     * @hidden\n     * Currently selected value\n     */\n    _value: any;\n\n    /** @hidden */\n    _onValueChange(value: unknown): void {\n        if (value === this._value) {\n            return;\n        }\n\n        this._value = value;\n\n        if (value === NOT_FILTERED_OPTION_VALUE) {\n            this.valueChange.emit([]);\n        } else {\n            this.valueChange.emit([value]);\n        }\n    }\n}\n","<ul fd-list [selection]=\"true\">\n    <li fd-list-item [selected]=\"_value === NOT_FILTERED_OPTION_VALUE\">\n        <fd-radio-button\n            name=\"sort-by\"\n            [value]=\"NOT_FILTERED_OPTION_VALUE\"\n            state=\"default\"\n            [ngModel]=\"_value\"\n            (ngModelChange)=\"_onValueChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.filterDialogNotFilteredLabel' | fdTranslate)() }}</span>\n    </li>\n    @for (option of options; track option) {\n        <li fd-list-item [selected]=\"option.value === _value\">\n            <fd-radio-button\n                [ngModel]=\"_value\"\n                (ngModelChange)=\"_onValueChange($event)\"\n                [value]=\"option.value\"\n                name=\"filtering-settings-single-select\"\n            ></fd-radio-button>\n            <span fd-list-title>{{ option.label }}</span>\n        </li>\n    }\n</ul>\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\nexport interface FiltersViewStep {\n    titleTemplateRef: TemplateRef<any>;\n    bodyTemplateRef: TemplateRef<any>;\n}\n\nexport const FILTERS_VIEW_STEP_TOKEN = new InjectionToken<FiltersViewStep>('FiltersViewStep');\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    forwardRef,\n    Input,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FILTER_STRATEGY, FilterType } from '@fundamental-ngx/platform/table-helpers';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { FilterCustomComponent } from './filter-custom.component';\nimport { FilterMultiSelectComponent } from './filter-multi-select.component';\nimport { FilterSingleSelectComponent } from './filter-single-select.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filter dialog step.\n *\n * Used to render selected filter options.\n *\n */\n\n@Component({\n    selector: 'fdp-filter-step',\n    templateUrl: './filter-step.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n    providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FilterStepComponent) }],\n    imports: [\n        ButtonComponent,\n        TitleComponent,\n        FilterSingleSelectComponent,\n        FilterMultiSelectComponent,\n        FilterCustomComponent,\n        FdTranslatePipe\n    ]\n})\nexport class FilterStepComponent implements FiltersViewStep {\n    /** ViewSettingsFilter options the filter is created from */\n    @Input()\n    filter: TableViewSettingsFilterComponent;\n\n    /** Column key to apply this filter to */\n    @Input()\n    columnKey: string;\n\n    /** Table's content density to be used */\n    @Input()\n    contentDensity: ContentDensity;\n\n    /** The current filter model */\n    @Input()\n    set filterBy(filterByList: CollectionFilter[]) {\n        this._filterBy = filterByList.find(({ field }) => field === this.columnKey);\n    }\n\n    /** Column name to display in the filter */\n    @Input()\n    columnName: string;\n\n    /** Heading level of the dialog. */\n    @Input()\n    headingLevel = 2;\n\n    /** Go back event */\n    @Output()\n    back: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Filter model change event */\n    @Output()\n    valueChange: EventEmitter<CollectionFilter> = new EventEmitter<CollectionFilter>();\n\n    /** Template ref to the filter title */\n    @ViewChild('titleTemplate')\n    titleTemplateRef: TemplateRef<any>;\n\n    /** Template ref to the filter body */\n    @ViewChild('bodyTemplate')\n    bodyTemplateRef: TemplateRef<any>;\n\n    /** @hidden */\n    readonly FILTER_TYPE = FilterType;\n\n    /** @hidden */\n    _filterBy?: CollectionFilter;\n\n    /** @hidden */\n    _onFilterValueChange(filterValue: any): void {\n        const filterBy: CollectionFilter = this._filterBy || {\n            field: this.columnKey,\n            value: null,\n            fieldName: this.columnName,\n            strategy: FILTER_STRATEGY.EQ,\n            exclude: false\n        };\n\n        const newFilterBy = { ...filterBy, value: filterValue };\n\n        this.valueChange.emit(newFilterBy);\n    }\n}\n","<ng-template #titleTemplate>\n    <button\n        fd-button\n        fdType=\"transparent\"\n        glyph=\"navigation-left-arrow\"\n        [title]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n        [ariaLabel]=\"('platformTable.filterDialogBackToColumns' | fdTranslate)()\"\n        (click)=\"back.emit()\"\n    ></button>\n    <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">\n        {{ ('platformTable.filterDialogFilterByLabel' | fdTranslate: { filterLabel: filter.label })() }}\n    </span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n    @switch (filter.type) {\n        @case (FILTER_TYPE.SINGLE) {\n            <fdp-filter-single-select\n                [options]=\"filter.values\"\n                [filterBy]=\"_filterBy\"\n                (valueChange)=\"_onFilterValueChange($event)\"\n            ></fdp-filter-single-select>\n        }\n        @case (FILTER_TYPE.MULTI) {\n            <fdp-filter-multi-select\n                [options]=\"filter.values\"\n                [filterBy]=\"_filterBy\"\n                (valueChange)=\"_onFilterValueChange($event)\"\n            ></fdp-filter-multi-select>\n        }\n        @case (FILTER_TYPE.CUSTOM) {\n            <fdp-filter-custom\n                [filter]=\"filter\"\n                [filterBy]=\"_filterBy\"\n                (valueChange)=\"_onFilterValueChange($event)\"\n            ></fdp-filter-custom>\n        }\n        @case (FILTER_TYPE.CATEGORY) {\n            Categories list is not implemented\n        }\n    }\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    forwardRef,\n    Input,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport {\n    ListComponent,\n    ListGroupHeaderDirective,\n    ListItemComponent,\n    ListLinkDirective,\n    ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\n\n/**\n * Filters list dialog step.\n *\n * Used to render available filters to drill down.\n *\n */\n\nexport interface SelectableFilter {\n    label: string;\n}\n@Component({\n    selector: 'fdp-filters-list-step',\n    templateUrl: './filters-list-step.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    /** Each filters dialog step must provide FILTERS_VIEW_STEP_TOKEN to be accessible */\n    providers: [{ provide: FILTERS_VIEW_STEP_TOKEN, useExisting: forwardRef(() => FiltersListStepComponent) }],\n    imports: [\n        TitleComponent,\n        ListComponent,\n        ListGroupHeaderDirective,\n        ListItemComponent,\n        ListLinkDirective,\n        ListTitleDirective,\n        FdTranslatePipe\n    ]\n})\nexport class FiltersListStepComponent implements FiltersViewStep {\n    /** Selectable filters list */\n    @Input()\n    filters: SelectableFilter[] = [];\n\n    /** Heading level of the dialog. */\n    @Input()\n    headingLevel: number;\n\n    /** Select event is fired once some filter is selected */\n    @Output()\n    selectFilter: EventEmitter<SelectableFilter> = new EventEmitter<SelectableFilter>();\n\n    /** Template ref to the filter title */\n    @ViewChild('titleTemplate')\n    titleTemplateRef: TemplateRef<any>;\n\n    /** Template ref to the filter body */\n    @ViewChild('bodyTemplate')\n    bodyTemplateRef: TemplateRef<any>;\n}\n","<ng-template #titleTemplate>\n    <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n        ('platformTable.filterDialogFilterTitle' | fdTranslate)()\n    }}</span>\n</ng-template>\n\n<ng-template #bodyTemplate>\n    <span\n        role=\"heading\"\n        [attr.aria-level]=\"headingLevel + 1\"\n        fd-list-group-header\n        id=\"platformTableInternalFilterListGroupHeader\"\n    >\n        {{ ('platformTable.filterDialogFilterBy' | fdTranslate)() }}\n    </span>\n    <ul fd-list [navigationIndicator]=\"true\" aria-labelledby=\"platformTableInternalFilterListGroupHeader\">\n        @for (filter of filters; track filter) {\n            <li\n                fd-list-item\n                [interactive]=\"true\"\n                (click)=\"selectFilter.emit(filter)\"\n                (keydown.space)=\"selectFilter.emit(filter)\"\n                (keydown.enter)=\"selectFilter.emit(filter)\"\n            >\n                <a fd-list-link [navigationIndicator]=\"true\">\n                    <span fd-list-title>{{ filter.label }}</span>\n                </a>\n            </li>\n        }\n    </ul>\n</ng-template>\n","import {\n    CollectionFilter,\n    SortDirection,\n    TableColumn,\n    TableDialogCommonData\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\n\nexport interface SettingsSortDialogColumn {\n    label: string;\n    key: string;\n}\n\nexport interface SettingsSortDialogData extends TableDialogCommonData {\n    direction: SortDirection;\n    field: string | null;\n    columns: SettingsSortDialogColumn[];\n    allowDisablingSorting: boolean;\n}\n\nexport interface SettingsSortDialogResultData {\n    field: string | null;\n    direction: SortDirection;\n}\n\nexport const NOT_SORTED_OPTION_VALUE = null;\nexport const INITIAL_DIRECTION = SortDirection.ASC;\n\nexport interface SettingsGroupDialogColumn {\n    label: string;\n    key: string;\n}\n\nexport interface SettingsGroupDialogData extends TableDialogCommonData {\n    direction: SortDirection;\n    field: string | null;\n    columns: SettingsGroupDialogColumn[];\n}\n\nexport interface SettingsGroupDialogResultData {\n    field: string | null;\n    direction: SortDirection;\n}\n\nexport const NOT_GROUPED_OPTION_VALUE = null;\n\nexport interface FiltersDialogData extends TableDialogCommonData {\n    filterBy: CollectionFilter[];\n    columns: TableColumn[];\n    viewSettingsFilters: TableViewSettingsFilterComponent[];\n}\n\nexport interface FiltersDialogResultData {\n    filterBy: CollectionFilter[];\n}\n\nexport enum ACTIVE_STEP {\n    SELECT_FILTER = 'SELECT_FILTER',\n    FILTER = 'FILTER'\n}\n\nexport enum ActiveTab {\n    SORT = 'sort',\n    FILTER = 'filter',\n    GROUP = 'group'\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    input,\n    Input,\n    OnInit,\n    output,\n    signal,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { CollectionFilter, FilterType, TableColumn } from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { TableViewSettingsFilterComponent } from '../table-view-settings-filter.component';\nimport { ACTIVE_STEP, FiltersDialogData, FiltersDialogResultData } from '../table-view-settings.model';\nimport { FilterStepComponent } from './filter-step.component';\nimport { FILTERS_VIEW_STEP_TOKEN, FiltersViewStep } from './filters-active-step';\nimport { FiltersListStepComponent, SelectableFilter } from './filters-list-step.component';\n\n@Component({\n    selector: 'fdp-filters',\n    templateUrl: './filters.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [NgTemplateOutlet, FiltersListStepComponent, FilterStepComponent]\n})\nexport class FiltersComponent implements AfterViewInit, OnInit {\n    /** Data for the filtering dialog */\n    @Input() set filteringData(value: FiltersDialogData) {\n        this._initializeFilterData(value);\n    }\n\n    /** @hidden Heading level */\n    headingLevel = input<number>(2);\n\n    /** Initial set of filters applied */\n    initialFilters = input<CollectionFilter[]>([]);\n\n    /** Emits when the active filter step view changes */\n    activeFilterStepViewChange = output<FiltersViewStep>();\n\n    /** Emits the final result of filter changes */\n    filterChange = output<FiltersDialogResultData>();\n\n    /** Emits whether the reset button should be enabled */\n    resetAvailabilityChange = output<boolean>();\n\n    /** Signal to hold currently applied filter rules */\n    filterBy = signal<CollectionFilter[]>([]);\n\n    /** Signal for table columns, used to retrieve the column key */\n    columns = signal<TableColumn[]>([]);\n\n    /** Signal for declared filter options */\n    viewSettingsFilters = signal<TableViewSettingsFilterComponent[]>([]);\n\n    /** Signal to track the currently selected filter step */\n    activeStep = signal<ACTIVE_STEP>(ACTIVE_STEP.SELECT_FILTER);\n\n    /** Signal to track the currently selected filter */\n    activeFilter = signal<Nullable<TableViewSettingsFilterComponent>>(null);\n\n    /** Signal to track the column key associated with the active filter */\n    activeFilterColumnKey = signal<Nullable<string>>(null);\n\n    /** Signal for the currently active filter step view */\n    activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n    /** Reference to the available steps */\n    readonly ACTIVE_STEP = ACTIVE_STEP;\n\n    /** hidden */\n    constructor(private readonly _cd: ChangeDetectorRef) {}\n\n    /** hidden */\n    ngOnInit(): void {\n        this._compareSelectedFilters();\n    }\n\n    /** hidden */\n    ngAfterViewInit(): void {\n        this._cd.detectChanges();\n    }\n\n    /** Setter for the active filter step view to trigger updates */\n    @ViewChild(FILTERS_VIEW_STEP_TOKEN)\n    set setActiveFilterStepView(view: FiltersViewStep) {\n        this.activeFilterStepView.set(view);\n        this.activeFilterStepViewChange.emit(view);\n        this._cd.detectChanges();\n    }\n\n    /**\n     * Select a filter to drill down and update the active filter step.\n     * @param filter The filter to be selected and applied.\n     */\n    selectFilter(filter: SelectableFilter): void {\n        this.activeStep.set(ACTIVE_STEP.FILTER);\n        const selectedFilter = filter as TableViewSettingsFilterComponent;\n        this.activeFilter.set(selectedFilter);\n        const columnKey = this.columns().find(({ name }) => name === selectedFilter.column)?.key || null;\n        this.activeFilterColumnKey.set(columnKey);\n        this._cd.detectChanges();\n    }\n\n    /** Navigate back to the top-level filters list */\n    goToFilters(): void {\n        this.activeStep.set(ACTIVE_STEP.SELECT_FILTER);\n        this.activeFilter.set(null);\n    }\n\n    /**\n     * Apply changes to the selected filter and emit the filter change event.\n     * @param filter The filter to apply\n     * @param filterComponent The component for the filter (provides type info)\n     */\n    applyFilter(filter: CollectionFilter, filterComponent: Nullable<TableViewSettingsFilterComponent>): void {\n        if (!filter) {\n            return;\n        }\n\n        // Update the filter by removing the previous filter for the field\n        this.filterBy.set(this.filterBy().filter(({ field }) => field !== filter.field));\n\n        if (!filterComponent) {\n            return;\n        }\n        const filterIsNotEmpty =\n            filterComponent.type === FilterType.CUSTOM ||\n            (filterComponent.type === FilterType.MULTI && filter.value?.length) ||\n            (filterComponent.type === FilterType.SINGLE && filter.value?.length);\n\n        // Add the new filter if it has a value\n        if (filterIsNotEmpty) {\n            this.filterBy.set([...this.filterBy(), filter]);\n        }\n\n        this._compareSelectedFilters();\n        this.filterChange.emit({ filterBy: this.filterBy() });\n        this._cd.detectChanges();\n    }\n\n    /**\n     * Private method to initialize filter data on component initialization.\n     * Extracts the initial filter values and table column data.\n     */\n    private _initializeFilterData(filteringData: FiltersDialogData): void {\n        if (filteringData) {\n            this.filterBy.set([...filteringData.filterBy]);\n            this.viewSettingsFilters.set(filteringData.viewSettingsFilters);\n            this.columns.set(filteringData.columns);\n        }\n    }\n\n    /**\n     * Private method to compare the current selected filters against the initial state.\n     * Enables or disables the reset button based on filter state comparison.\n     */\n    private _compareSelectedFilters(): void {\n        if (!shallowEqual(this.initialFilters(), this.filterBy())) {\n            this.resetAvailabilityChange.emit(true);\n        } else {\n            this.resetAvailabilityChange.emit(false);\n        }\n    }\n}\n","@if (activeFilterStepView()?.bodyTemplateRef) {\n    <ng-container [ngTemplateOutlet]=\"activeFilterStepView()?.bodyTemplateRef ?? null\"></ng-container>\n}\n<!-- Keep active step component  -->\n@if (activeStep() === ACTIVE_STEP.SELECT_FILTER) {\n    <fdp-filters-list-step\n        [headingLevel]=\"headingLevel()\"\n        [filters]=\"viewSettingsFilters()\"\n        (selectFilter)=\"selectFilter($event)\"\n    ></fdp-filters-list-step>\n} @else if (activeStep() === ACTIVE_STEP.FILTER) {\n    <fdp-filter-step\n        [headingLevel]=\"headingLevel()\"\n        [columnKey]=\"activeFilterColumnKey()!\"\n        [columnName]=\"activeFilter()!.label\"\n        [filter]=\"activeFilter()!\"\n        [filterBy]=\"filterBy()\"\n        (back)=\"goToFilters()\"\n        (valueChange)=\"applyFilter($event, activeFilter())\"\n    ></fdp-filter-step>\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit, output, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n    ListComponent,\n    ListGroupHeaderDirective,\n    ListItemComponent,\n    ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport {\n    INITIAL_DIRECTION,\n    NOT_GROUPED_OPTION_VALUE,\n    SettingsGroupDialogColumn,\n    SettingsGroupDialogData,\n    SettingsGroupDialogResultData\n} from '../table-view-settings.model';\n\nlet groupOrderHeaderUniqueId = 0;\n\n@Component({\n    selector: 'fdp-grouping',\n    templateUrl: './grouping.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        ListComponent,\n        ListGroupHeaderDirective,\n        ListTitleDirective,\n        ListItemComponent,\n        RadioButtonComponent,\n        FormsModule,\n        FdTranslatePipe\n    ]\n})\nexport class GroupingComponent implements OnInit {\n    /** Input data for grouping */\n    groupingData = input<SettingsGroupDialogData>();\n\n    /** @hidden Initial grouping settings */\n    initialGrouping = input<Nullable<SettingsGroupDialogResultData>>();\n\n    /** @hidden Heading level */\n    headingLevel = input<number>(2);\n\n    /** Event emitter for group changes */\n    groupChange = output<SettingsGroupDialogResultData>();\n\n    /** Event emitter for reset availability changes */\n    resetAvailabilityChange = output<boolean>();\n\n    /** Current selected grouping direction */\n    direction = signal<SortDirection>(INITIAL_DIRECTION);\n\n    /** Current selected grouping field */\n    field = signal<string | null>(NOT_GROUPED_OPTION_VALUE);\n\n    /** Table columns available for grouping */\n    columns = signal<SettingsGroupDialogColumn[]>([]);\n\n    /** @hidden */\n    groupOrderHeaderId = `fdp-table-group-dialog-group-order-header-${groupOrderHeaderUniqueId++}`;\n\n    /** @hidden */\n    groupByHeaderId = `fdp-table-group-dialog-group-by-header-${groupOrderHeaderUniqueId++}`;\n\n    /** Constants for grouping directions */\n    readonly SORT_DIRECTION = SortDirection;\n\n    /** Constant for 'Not grouped' option */\n    readonly NOT_GROUPED_OPTION_VALUE = NOT_GROUPED_OPTION_VALUE;\n\n    /** hidden */\n    ngOnInit(): void {\n        const data = this.groupingData();\n        if (data) {\n            this._initGroupingData(data);\n        }\n\n        this._compareInitialGrouping();\n    }\n\n    /**\n     * Handle changes to grouping direction.\n     * @param direction New grouping direction.\n     */\n    _groupOrderChange(direction: SortDirection): void {\n        this.direction.set(direction);\n        this._onModelChange();\n    }\n\n    /**\n     * Handle changes to the grouping field.\n     * @param field New grouping field.\n     */\n    _groupFieldChange(field: string): void {\n        this.field.set(field);\n        this._onModelChange();\n    }\n\n    /**\n     * Initialize grouping data and signals.\n     * @param groupingData Input grouping data.\n     * @hidden\n     */\n    private _initGroupingData(groupingData: SettingsGroupDialogData): void {\n        this.columns.set(groupingData.columns || []);\n        this.direction.set(groupingData.direction ?? INITIAL_DIRECTION);\n        this.field.set(groupingData.field ?? NOT_GROUPED_OPTION_VALUE);\n    }\n\n    /**\n     * Compare current grouping state with the initial state, emit events for group and reset availability changes.\n     * @hidden\n     */\n    private _onModelChange(): void {\n        const initialGrouping = this.initialGrouping();\n        if (!initialGrouping) {\n            return;\n        }\n        const isInitialDiffers =\n            this.direction() !== initialGrouping.direction || this.field() !== initialGrouping.field;\n\n        const result: SettingsGroupDialogResultData = { field: this.field(), direction: this.direction() };\n        this.groupChange.emit(result);\n        this.resetAvailabilityChange.emit(isInitialDiffers);\n    }\n\n    /**\n     * Compare the initial grouping state with the current state and emit reset availability change if needed.\n     * @hidden\n     */\n    private _compareInitialGrouping(): void {\n        const appliedGrouping: SettingsGroupDialogResultData = {\n            field: this.field(),\n            direction: this.direction()\n        };\n\n        if (!shallowEqual(this.initialGrouping(), appliedGrouping)) {\n            this.resetAvailabilityChange.emit(true);\n        }\n    }\n}\n","<span role=\"heading\" [attr.aria-level]=\"headingLevel() + 1\" fd-list-group-header>\n    <span fd-list-title [attr.id]=\"groupOrderHeaderId\">\n        {{ ('platformTable.groupDialogGroupOrderHeader' | fdTranslate)() }}\n    </span>\n</span>\n<ul fd-list [selection]=\"true\">\n    <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\" [attr.aria-describedby]=\"groupOrderHeaderId\">\n        <fd-radio-button\n            name=\"sort-order\"\n            value=\"asc\"\n            state=\"default\"\n            [ngModel]=\"direction()\"\n            (ngModelChange)=\"_groupOrderChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderAsc' | fdTranslate)() }}</span>\n    </li>\n    <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\" [attr.aria-describedby]=\"groupOrderHeaderId\">\n        <fd-radio-button\n            name=\"sort-order\"\n            value=\"desc\"\n            state=\"default\"\n            [ngModel]=\"direction()\"\n            (ngModelChange)=\"_groupOrderChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.groupDialogGroupOrderDesc' | fdTranslate)() }}</span>\n    </li>\n</ul>\n<span role=\"heading\" [attr.aria-level]=\"headingLevel() + 1\" fd-list-group-header>\n    <span fd-list-title [attr.id]=\"groupByHeaderId\">\n        {{ ('platformTable.groupDialogGroupByHeader' | fdTranslate)() }}\n    </span>\n</span>\n<ul fd-list [selection]=\"true\">\n    <li fd-list-item [selected]=\"NOT_GROUPED_OPTION_VALUE === field()\" [attr.aria-describedby]=\"groupByHeaderId\">\n        <fd-radio-button\n            name=\"sort-by\"\n            [value]=\"NOT_GROUPED_OPTION_VALUE\"\n            state=\"default\"\n            [ngModel]=\"field()\"\n            (ngModelChange)=\"_groupFieldChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.groupDialogNotGroupedLabel' | fdTranslate)() }}</span>\n    </li>\n    @for (column of columns(); track column) {\n        <li fd-list-item [selected]=\"column.key === field()\" [attr.aria-describedby]=\"groupByHeaderId\">\n            <fd-radio-button\n                name=\"sort-by\"\n                [value]=\"column.key\"\n                state=\"default\"\n                [ngModel]=\"field()\"\n                (ngModelChange)=\"_groupFieldChange($event)\"\n            ></fd-radio-button>\n            <span fd-list-title>{{ column.label }}</span>\n        </li>\n    }\n</ul>\n","import { ChangeDetectionStrategy, Component, input, OnInit, output, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport {\n    ListComponent,\n    ListGroupHeaderDirective,\n    ListItemComponent,\n    ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CollectionSort, SortDirection } from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport {\n    INITIAL_DIRECTION,\n    NOT_SORTED_OPTION_VALUE,\n    SettingsSortDialogColumn,\n    SettingsSortDialogData,\n    SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\nlet sortOrderHeaderUniqueId = 0;\nlet sortDialogSortByHeaderUniqueId = 0;\n\n@Component({\n    selector: 'fdp-sorting',\n    templateUrl: './sorting.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        ListComponent,\n        ListGroupHeaderDirective,\n        ListTitleDirective,\n        ListItemComponent,\n        RadioButtonComponent,\n        FormsModule,\n        FdTranslatePipe\n    ]\n})\nexport class SortingComponent implements OnInit {\n    /** Input data for sorting */\n    sortingData = input<SettingsSortDialogData>();\n\n    /** @hidden Heading level */\n    headingLevel = input<number>(2);\n\n    /** @hidden Initial sorting state */\n    initialSorting = input<Nullable<CollectionSort>>();\n\n    /** Event emitter for sort changes */\n    sortChange = output<SettingsSortDialogResultData>();\n\n    /** Event emitter for reset availability changes */\n    resetAvailabilityChange = output<boolean>();\n\n    /** Current selected sorting direction */\n    direction = signal<SortDirection>(INITIAL_DIRECTION);\n\n    /** Current selected sorting field */\n    field = signal<string | null>(NOT_SORTED_OPTION_VALUE);\n\n    /** Whether disabling sorting is allowed */\n    allowDisablingSorting = signal<boolean>(false);\n\n    /** Available table columns for sorting */\n    columns = signal<SettingsSortDialogColumn[]>([]);\n\n    /** @hidden */\n    sortOrderHeaderId = `fdp-table-sort-order-header-${sortOrderHeaderUniqueId++}`;\n\n    /** @hidden */\n    sortDialogSortByHeaderId = `fdp-table-sort-dialog-sort-by-header-${sortDialogSortByHeaderUniqueId++}`;\n\n    /** @hidden Constants for sort direction */\n    readonly SORT_DIRECTION = SortDirection;\n\n    /** @hidden Constant for 'Not sorted' option value */\n    readonly NOT_SORTED_OPTION_VALUE = NOT_SORTED_OPTION_VALUE;\n\n    /** hidden */\n    ngOnInit(): void {\n        const sortingData = this.sortingData();\n        if (sortingData) {\n            this._initSortingData(sortingData);\n        }\n\n        this._compareInitialSorting();\n    }\n\n    /**\n     * Handle sort direction changes.\n     * @param direction New sorting direction.\n     */\n    _sortDirectionChange(direction: SortDirection): void {\n        this.direction.set(direction);\n        this._onModelChange();\n    }\n\n    /**\n     * Handle sort field changes.\n     * @param field New sorting field.\n     */\n    _sortFieldChange(field: string): void {\n        this.field.set(field);\n        this._onModelChange();\n    }\n\n    /**\n     * Initialize sorting data and signals.\n     * @param sortingData Input sorting data.\n     * @hidden\n     */\n    private _initSortingData(sortingData: SettingsSortDialogData): void {\n        this.columns.set(sortingData.columns || []);\n        this.direction.set(sortingData.direction ?? INITIAL_DIRECTION);\n        this.field.set(sortingData.field ?? NOT_SORTED_OPTION_VALUE);\n        this.allowDisablingSorting.set(sortingData.allowDisablingSorting);\n    }\n\n    /**\n     * Emit changes to the model and compare with initial sorting.\n     * @hidden\n     */\n    private _onModelChange(): void {\n        const initialSorting = this.initialSorting();\n        if (!initialSorting) {\n            return;\n        }\n        const isInitialDiffers = this.direction() !== initialSorting.direction || this.field() !== initialSorting.field;\n\n        this.resetAvailabilityChange.emit(isInitialDiffers);\n        this.sortChange.emit({ direction: this.direction(), field: this.field() });\n    }\n\n    /**\n     * Compare the current sorting state with the initial state.\n     * Emit reset availability if the sorting has changed.\n     * @hidden\n     */\n    private _compareInitialSorting(): void {\n        const appliedSorting: CollectionSort = {\n            field: this.field(),\n            direction: this.direction()\n        };\n\n        const isEqual = shallowEqual(this.initialSorting(), appliedSorting);\n        if (!isEqual) {\n            this.resetAvailabilityChange.emit(true);\n        }\n    }\n}\n","<span role=\"heading\" [attr.aria-level]=\"headingLevel() + 1\" fd-list-group-header>\n    <span fd-list-title [attr.id]=\"sortOrderHeaderId\">\n        {{ ('platformTable.sortDialogSortOrderHeader' | fdTranslate)() }}\n    </span>\n</span>\n<ul fd-list [selection]=\"true\">\n    <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.ASC\" [attr.aria-describedby]=\"sortOrderHeaderId\">\n        <fd-radio-button\n            name=\"sort-order\"\n            value=\"asc\"\n            state=\"default\"\n            [ngModel]=\"direction()\"\n            (ngModelChange)=\"_sortDirectionChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.sortDialogSortOrderAsc' | fdTranslate)() }}</span>\n    </li>\n    <li fd-list-item [selected]=\"direction() === SORT_DIRECTION.DESC\" [attr.aria-describedby]=\"sortOrderHeaderId\">\n        <fd-radio-button\n            name=\"sort-order\"\n            value=\"desc\"\n            state=\"default\"\n            [ngModel]=\"direction()\"\n            (ngModelChange)=\"_sortDirectionChange($event)\"\n        ></fd-radio-button>\n        <span fd-list-title>{{ ('platformTable.sortDialogSortOrderDesc' | fdTranslate)() }}</span>\n    </li>\n</ul>\n\n<span role=\"heading\" [attr.aria-level]=\"headingLevel() + 1\" fd-list-group-header>\n    <span fd-list-title [attr.id]=\"sortDialogSortByHeaderId\">\n        {{ ('platformTable.sortDialogSortByHeader' | fdTranslate)() }}\n    </span>\n</span>\n<ul fd-list [selection]=\"true\">\n    @if (allowDisablingSorting()) {\n        <li\n            fd-list-item\n            [selected]=\"field() === NOT_SORTED_OPTION_VALUE\"\n            [attr.aria-describedby]=\"sortDialogSortByHeaderId\"\n        >\n            <fd-radio-button\n                name=\"sort-by\"\n                [value]=\"NOT_SORTED_OPTION_VALUE\"\n                state=\"default\"\n                [ngModel]=\"field()\"\n                (ngModelChange)=\"_sortFieldChange($event)\"\n            ></fd-radio-button>\n            <span fd-list-title>{{ ('platformTable.sortDialogNotSortedLabel' | fdTranslate)() }}</span>\n        </li>\n    }\n    @for (column of columns(); track column) {\n        <li fd-list-item [selected]=\"column.key === field()\" [attr.aria-describedby]=\"sortDialogSortByHeaderId\">\n            <fd-radio-button\n                name=\"sort-by\"\n                [value]=\"column.key\"\n                state=\"default\"\n                [ngModel]=\"field()\"\n                (ngModelChange)=\"_sortFieldChange($event)\"\n            ></fd-radio-button>\n            <span fd-list-title>{{ column.label }}</span>\n        </li>\n    }\n</ul>\n","import { CdkScrollable } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FocusableItemDirective, InitialFocusDirective, Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n    BarElementDirective,\n    BarLeftDirective,\n    BarRightDirective,\n    ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent,\n    DialogRef\n} from '@fundamental-ngx/core/dialog';\nimport { SegmentedButtonComponent } from '@fundamental-ngx/core/segmented-button';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CollectionFilter, CollectionSort, Table } from '@fundamental-ngx/platform/table-helpers';\nimport { RESETTABLE_TOKEN, ResetButtonComponent, Resettable } from '../../reset-button/reset-button.component';\nimport { FiltersViewStep } from '../filtering/filters-active-step';\nimport { FiltersComponent } from '../filtering/filters.component';\nimport { GroupingComponent } from '../grouping/grouping.component';\nimport { SortingComponent } from '../sorting/sorting.component';\nimport {\n    ActiveTab,\n    FiltersDialogData,\n    FiltersDialogResultData,\n    INITIAL_DIRECTION,\n    NOT_GROUPED_OPTION_VALUE,\n    NOT_SORTED_OPTION_VALUE,\n    SettingsGroupDialogData,\n    SettingsGroupDialogResultData,\n    SettingsSortDialogData,\n    SettingsSortDialogResultData\n} from '../table-view-settings.model';\n\n@Component({\n    selector: 'fdp-settings-dialog-settings',\n    standalone: true,\n    providers: [{ provide: RESETTABLE_TOKEN, useExisting: forwardRef(() => SettingsDialogComponent) }],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        BarLeftDirective,\n        BarElementDirective,\n        BarRightDirective,\n        ResetButtonComponent,\n        CdkScrollable,\n        DialogBodyComponent,\n        DialogFooterComponent,\n        FdTranslatePipe,\n        FormsModule,\n        ButtonComponent,\n        SortingComponent,\n        FiltersComponent,\n        GroupingComponent,\n        NgTemplateOutlet,\n        SegmentedButtonComponent,\n        TemplateDirective,\n        TitleComponent,\n        ButtonBarComponent,\n        InitialFocusDirective,\n        FocusableItemDirective\n    ],\n    templateUrl: './settings-dialog.component.html'\n})\nexport class SettingsDialogComponent implements Resettable {\n    /** Data for sorting */\n    sortingData = signal<Nullable<SettingsSortDialogData>>(null);\n\n    /** Data for filtering */\n    filteringData = signal<Nullable<FiltersDialogData>>(null);\n\n    /** Data for grouping */\n    groupingData = signal<Nullable<SettingsGroupDialogData>>(null);\n\n    /** The active tab to display ('sort', 'filter', or 'group') */\n    activeTab = signal<Nullable<ActiveTab>>(null);\n\n    /** Flag indicating whether the subheader should be shown */\n    showSubheader = signal<boolean>(false);\n\n    /** Heading level of the dialog header. */\n    headingLevel: number;\n\n    /** Current step component to render for filtering */\n    activeFilterStepView = signal<Nullable<FiltersViewStep>>(null);\n\n    /** Signal to track reset availability */\n    readonly isResetAvailable$ = signal(false);\n\n    /** @hidden Initial sorting configuration */\n    _initialSorting = signal<Nullable<CollectionSort>>(null);\n\n    /** @hidden Initial filter configurations */\n    _initialFilters = signal<CollectionFilter[]>([]);\n\n    /** @hidden Initial grouping configurations */\n    _initialGrouping = signal<Nullable<SettingsGroupDialogResultData>>(null);\n\n    /**\n     * Constructor that initializes dialog data and sets initial values for sorting, filtering, and grouping.\n     */\n    constructor(\n        private readonly dialogRef: DialogRef<{\n            sortingData: Nullable<SettingsSortDialogData>;\n            filteringData: Nullable<FiltersDialogData>;\n            groupingData: Nullable<SettingsGroupDialogData>;\n            headingLevel: 1 | 2 | 3 | 4 | 5 | 6;\n        }>,\n        private readonly _table: Table\n    ) {\n        const data = this.dialogRef.data;\n        this.sortingData.set(data.sortingData);\n        this.filteringData.set(data.filteringData);\n        this.groupingData.set(data.groupingData);\n        this.headingLevel = data.headingLevel;\n        this.activeTab.set(this._getInitialActiveTab());\n        this._shouldRenderSubheader();\n        this._setInitialSorting();\n        this._setInitialFilters();\n        this._setInitialGrouping();\n    }\n\n    /**\n     * Confirm the dialog action and close the dialog, returning updated settings data.\n     */\n    confirm(): void {\n        this.dialogRef.close({\n            sortingData: this.sortingData(),\n            filteringData: this.filteringData(),\n            groupingData: this.groupingData()\n        });\n    }\n\n    /**\n     * Cancel the dialog and close it without saving any changes.\n     */\n    cancel(): void {\n        this.dialogRef.close(null);\n    }\n\n    /**\n     * Reset the settings based on the currently active tab (sort, filter, group).\n     */\n    reset(): void {\n        if (this.activeTab() === ActiveTab.SORT && this.sortingData()) {\n            this.sortingData.set({\n                ...this.sortingData()!,\n                field: this._initialSorting()!.field,\n                direction: this._initialSorting()!.direction\n            });\n        }\n        if (this.activeTab() === ActiveTab.FILTER && this.filteringData()) {\n            this.filteringData.set({\n                ...this.filteringData()!,\n                filterBy: this._initialFilters()\n            });\n        }\n        if (this.activeTab() === ActiveTab.GROUP && this.groupingData()) {\n            this.groupingData.set({\n                ...this.groupingData()!,\n                field: this._initialGrouping()!.field,\n                direction: this._initialGrouping()!.direction\n            });\n        }\n        this.isResetAvailable$.set(false);\n    }\n\n    /**\n     * Handle sort change event and update sorting data.\n     * @param event Updated sorting data.\n     */\n    onSortChange(event: SettingsSortDialogResultData): void {\n        this.sortingData.set({\n            ...this.sortingData()!,\n            field: event.field,\n            direction: event.direction\n        });\n    }\n\n    /**\n     * Handle filter change event and update filtering data.\n     * @param event Updated filtering data.\n     */\n    onFilterChange(event: FiltersDialogResultData): void {\n        this.filteringData.set({\n            ...this.filteringData()!,\n            filterBy: event.filterBy\n        });\n    }\n\n    /**\n     * Handle group change event and update grouping data.\n     * @param event Updated grouping data.\n     */\n    onGroupChange(event: SettingsGroupDialogResultData): void {\n        this.groupingData.set({\n            ...this.groupingData()!,\n            field: event.field,\n            direction: event.direction\n        });\n    }\n\n    /**\n     * Update the active filter step view when a change occurs.\n     * @param event The new active filter step view.\n     */\n    onActiveFilterStepViewChange(event: FiltersViewStep): void {\n        this.activeFilterStepView.set(event);\n    }\n\n    /**\n     * Handle changes to the reset availability.\n     * @param event Boolean indicating if reset is available.\n     */\n    onResetAvailabilityChange(event: boolean): void {\n        this.isResetAvailable$.set(event);\n    }\n\n    /**\n     * Determine the initial active tab based on available data.\n     * @returns The name of the active tab to display.\n     */\n    private _getInitialActiveTab(): Nullable<ActiveTab> {\n        if (this.sortingData()) {\n            return ActiveTab.SORT;\n        } else if (this.filteringData()) {\n            return ActiveTab.FILTER;\n        } else if (this.groupingData()) {\n            return ActiveTab.GROUP;\n        }\n        return null;\n    }\n\n    /**\n     * Determine if the subheader should be shown based on the availability of sorting, filtering, and grouping data.\n     */\n    private _shouldRenderSubheader(): void {\n        const validDataCount = [this.sortingData(), this.filteringData(), this.groupingData()].filter(\n            (data) => data !== null\n        ).length;\n        this.showSubheader.set(validDataCount >= 2);\n    }\n\n    /**\n     * Set initial sorting configuration from the table's state.\n     */\n    private _setInitialSorting(): void {\n        const initialSorting = (this._table.initialState?.initialSortBy || [])[0];\n        this._initialSorting.set({\n            field: initialSorting?.field ?? NOT_SORTED_OPTION_VALUE,\n            direction: initialSorting?.direction ?? INITIAL_DIRECTION\n        });\n    }\n\n    /**\n     * Set initial filter configuration from the table's state.\n     */\n    private _setInitialFilters(): void {\n        this._initialFilters.set(this._table.initialState?.initialFilterBy ?? []);\n    }\n\n    /**\n     * Set initial grouping configuration from the table's state.\n     */\n    private _setInitialGrouping(): void {\n        const initialGrouping = (this._table.initialState?.initialGroupBy || [])[0];\n        this._initialGrouping.set({\n            field: initialGrouping?.field ?? NOT_GROUPED_OPTION_VALUE,\n            direction: initialGrouping?.direction ?? INITIAL_DIRECTION\n        });\n    }\n}\n","<fd-dialog>\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <div fd-bar-left>\n                @if (activeTab() !== 'filter') {\n                    <fd-bar-element>\n                        <span role=\"heading\" [attr.aria-level]=\"headingLevel\" fd-title [headerSize]=\"4\">{{\n                            ('platformTable.settingsDialogHeader' | fdTranslate)()\n                        }}</span>\n                    </fd-bar-element>\n                } @else {\n                    <fd-bar-element>\n                        @if (activeFilterStepView()?.titleTemplateRef) {\n                            <ng-container\n                                [ngTemplateOutlet]=\"activeFilterStepView()?.titleTemplateRef ?? null\"\n                            ></ng-container>\n                        }\n                    </fd-bar-element>\n                }\n            </div>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <fdp-table-reset-button></fdp-table-reset-button>\n                </fd-bar-element>\n            </div>\n        </ng-template>\n\n        @if (showSubheader()) {\n            <ng-template fdkTemplate=\"subheader\">\n                <fd-segmented-button [(ngModel)]=\"activeTab\" [style.height]=\"'fit-content'\">\n                    @if (sortingData()) {\n                        <button\n                            fd-button\n                            fdkFocusableItem\n                            value=\"sort\"\n                            glyph=\"sort\"\n                            [title]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n                            [ariaLabel]=\"('platformTable.toolbarActionSortButtonTitle' | fdTranslate)()\"\n                        ></button>\n                    }\n                    @if (filteringData()) {\n                        <button\n                            fd-button\n                            fdkFocusableItem\n                            value=\"filter\"\n                            glyph=\"filter\"\n                            [title]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n                            [ariaLabel]=\"('platformTable.toolbarActionFilterButtonTitle' | fdTranslate)()\"\n                        ></button>\n                    }\n                    @if (groupingData()) {\n                        <button\n                            fd-button\n                            fdkFocusableItem\n                            value=\"group\"\n                            glyph=\"group-2\"\n                            [title]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n                            [ariaLabel]=\"('platformTable.toolbarActionGroupButtonTitle' | fdTranslate)()\"\n                        ></button>\n                    }\n                </fd-segmented-button>\n            </ng-template>\n        }\n    </fd-dialog-header>\n\n    <fd-dialog-body disablePaddings>\n        @switch (activeTab()) {\n            @case ('sort') {\n                <fdp-sorting\n                    [headingLevel]=\"headingLevel\"\n                    [sortingData]=\"sortingData()!\"\n                    [initialSorting]=\"_initialSorting()\"\n                    (sortChange)=\"onSortChange($event)\"\n                    (resetAvailabilityChange)=\"onResetAvailabilityChange($event)\"\n                ></fdp-sorting>\n            }\n            @case ('filter') {\n                <fdp-filters\n                    [headingLevel]=\"headingLevel\"\n                    [filteringData]=\"filteringData()!\"\n                    [initialFilters]=\"_initialFilters()\"\n                    (activeFilterStepViewChange)=\"onActiveFilterStepViewChange($event)\"\n                    (filterChange)=\"onFilterChange($event)\"\n                    (resetAvailabilityChange)=\"onResetAvailabilityChange($event)\"\n                ></fdp-filters>\n            }\n            @case ('group') {\n                <fdp-grouping\n                    [headingLevel]=\"headingLevel\"\n                    [groupingData]=\"groupingData()!\"\n                    [initialGrouping]=\"_initialGrouping()\"\n                    (groupChange)=\"onGroupChange($event)\"\n                    (resetAvailabilityChange)=\"onResetAvailabilityChange($event)\"\n                ></fdp-grouping>\n            }\n        }\n    </fd-dialog-body>\n\n    <fd-dialog-footer>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformTable.confirmBtnLabel' | fdTranslate)()\"\n            (click)=\"confirm()\"\n        ></fd-button-bar>\n        <fd-button-bar\n            [label]=\"('platformTable.cancelBtnLabel' | fdTranslate)()\"\n            fdkInitialFocus\n            (click)=\"cancel()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    forwardRef,\n    inject,\n    Input,\n    QueryList,\n    ViewEncapsulation\n} from '@angular/core';\nimport { filter, startWith } from 'rxjs/operators';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';\nimport {\n    CollectionFilter,\n    SortDirection,\n    Table,\n    TableColumn,\n    TableDialogCommonData,\n    TableState\n} from '@fundamental-ngx/platform/table-helpers';\nimport { SettingsDialogComponent } from './settings-dialog/settings-dialog.component';\nimport { TableViewSettingsFilterComponent } from './table-view-settings-filter.component';\nimport { FiltersDialogData, SettingsGroupDialogData, SettingsSortDialogData } from './table-view-settings.model';\n\nexport const dialogConfig: DialogConfig = {\n    responsivePadding: false,\n    verticalPadding: false,\n    width: '340px'\n};\n\nexport interface CombinedTableDialogData {\n    sortingData: SettingsSortDialogData | null;\n    filteringData: FiltersDialogData | null;\n    groupingData: SettingsGroupDialogData | null;\n}\n\n/**\n * View settings dialog component.\n *\n * Used to link view settings filters options to the grid table.\n *\n * ```html\n * <fdp-table #myTable></fdp-table>\n * ...\n * <fdp-table-view-settings-dialog [table]=\"myTable\">\n *     <fdp-table-view-settings-filter\n *         column=\"status\"\n *         label=\"Status\"\n *         type=\"single-select\"\n *         values=\"[{value: 'filterValue', label: 'Filter label'}]\">\n *     </fdp-table-view-settings-filter>\n * </fdp-table-view-settings-dialog>\n * ```\n * */\n@Component({\n    selector: 'fdp-table-view-settings-dialog',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    standalone: true\n})\nexport class TableViewSettingsDialogComponent implements AfterViewInit {\n    /** Reference to table component. */\n    @Input()\n    set table(table: Table) {\n        this._setTable(table);\n    }\n\n    get table(): Table {\n        return this._table;\n    }\n\n    /** Whether to allow selecting '(Not sorted)' option in sorting dialog. */\n    @Input()\n    allowDisablingSorting = true;\n\n    /** Heading level of the dialog. */\n    @Input()\n    headingLevel: 1 | 2 | 3 | 4 | 5 | 6 = 2;\n\n    /** @hidden */\n    @ContentChildren(forwardRef(() => TableViewSettingsFilterComponent))\n    filters: QueryList<TableViewSettingsFilterComponent>;\n\n    /** @hidden */\n    _table: Table;\n\n    /** @hidden */\n    _dialogRef: DialogRef<TableDialogCommonData | CombinedTableDialogData, any>;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(private readonly _dialogService: DialogService) {}\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._listenToFilters();\n    }\n\n    /** Open Sort Settings Dialog */\n    showViewSettingsDialog(): void {\n        const state = this._getTableState();\n        const columns = this._getTableColumns();\n\n        const sortData: SettingsSortDialogData = {\n            columns: columns.filter(({ sortable }) => sortable),\n            direction: state.sortBy?.[0]?.direction,\n            field: state.sortBy?.[0]?.field,\n            allowDisablingSorting: this.allowDisablingSorting\n        };\n\n        const filterData: FiltersDialogData = {\n            columns,\n            viewSettingsFilters: this.filters.toArray(),\n            filterBy: state?.filterBy\n        };\n\n        const groupData: SettingsGroupDialogData = {\n            columns: columns.filter(({ groupable }) => groupable),\n            direction: state.groupBy?.[0]?.direction,\n            field: state.groupBy?.[0]?.field\n        };\n\n        if (this._dialogRef) {\n            this._dialogRef.dismiss();\n        }\n\n        this._dialogRef = this._dialogService.open(\n            SettingsDialogComponent,\n            {\n                ...dialogConfig,\n                data: {\n                    sortingData: sortData.columns.length > 0 ? sortData : null,\n                    filteringData: filterData.viewSettingsFilters.length > 0 ? filterData : null,\n                    groupingData: groupData.columns.length > 0 ? groupData : null,\n                    headingLevel: this.headingLevel\n                }\n            },\n            this.table.injector\n        );\n\n        this._dialogRef.afterClosed\n            .pipe(\n                filter((result) => !!result),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe(({ sortingData, filteringData, groupingData }) => {\n                if (sortingData) {\n                    this._applySorting(sortingData.field, sortingData.direction);\n                }\n                if (filteringData) {\n                    this._applyFiltering(filteringData.filterBy);\n                }\n                if (groupingData) {\n                    this._applyGrouping(groupingData.field, groupingData.direction);\n                }\n            });\n    }\n\n    /** @hidden */\n    private _listenToFilters(): void {\n        this.filters.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            if (this.filters.toArray().length > 0) {\n                this._table?.showSettingsInToolbar(true);\n            }\n        });\n    }\n\n    /** @hidden */\n    private _setTable(table: Table): void {\n        this._table = table;\n        this._subscribeToTable();\n    }\n\n    /** @hidden */\n    private _subscribeToTable(): void {\n        if (!this._table) {\n            return;\n        }\n\n        this._table.openTableSortSettings\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.showViewSettingsDialog());\n\n        this._table.openTableFilterSettings\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.showViewSettingsDialog());\n\n        this._table.openTableGroupSettings\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.showViewSettingsDialog());\n\n        this._table.tableColumnsStream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((columns: TableColumn[]) => {\n            const show = columns.some(({ sortable }) => sortable) || columns.some(({ groupable }) => groupable);\n            this._table?.showSettingsInToolbar(show);\n        });\n    }\n\n    /** @hidden */\n    private _getTableState(): TableState {\n        return this._table?.getTableState();\n    }\n\n    /** @hidden */\n    private _getTableColumns(): TableColumn[] {\n        return this._table?.getTableColumns() || [];\n    }\n\n    /** @hidden */\n    private _applySorting(field: string | null, direction: SortDirection): void {\n        this._table?.sort(field ? [{ field, direction }] : []);\n    }\n\n    /** @hidden */\n    private _applyFiltering(filters: CollectionFilter[]): void {\n        this._table?.filter(filters);\n    }\n\n    /** @hidden */\n    private _applyGrouping(field: string | null, direction: SortDirection): void {\n        this._table?.group(field ? [{ field, direction, showAsColumn: true }] : []);\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { ListComponent, ListItemComponent, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Table, TableDataSourceDirective, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n    selector: 'fdp-table-growing-button',\n    imports: [ListComponent, ListItemComponent, ListTitleDirective, ListLinkDirective, FdTranslatePipe],\n    templateUrl: './table-growing-button.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableGrowingButtonComponent {\n    /** Whether to show items count. */\n    @Input()\n    showItemsCount = false;\n\n    /** @hidden */\n    readonly _tableService = inject(TableService);\n\n    /** @hidden */\n    readonly _dataSourceDirective = inject(TableDataSourceDirective);\n\n    /** @hidden */\n    readonly _table = inject(Table);\n\n    /** @hidden */\n    _loadMore(): void {\n        (this._table as any)._onSpyIntersect(true);\n    }\n}\n","<div fd-list role=\"none\">\n    @if (_table.loadedRows$() < _dataSourceDirective.totalItems$()) {\n        <div\n            fd-list-item\n            ariaRole=\"none\"\n            class=\"fdp-table__growing-button\"\n            [growing]=\"true\"\n            [style.height]=\"'auto'\"\n            [action]=\"true\"\n        >\n            <a fd-list-link (click)=\"_loadMore()\">\n                <div fd-list-title>\n                    <div\n                        class=\"fdp-table__growing-button-content\"\n                        [class.fdp-table__growing-button-content--byline]=\"showItemsCount\"\n                    >\n                        @if (!showItemsCount) {\n                            {{ ('platformTable.loadMore' | fdTranslate)() }}\n                        } @else {\n                            <div class=\"fdp-table__growing-button__title\">\n                                {{ ('platformTable.loadMore' | fdTranslate)() }}\n                            </div>\n                            <div class=\"fdp-table__growing-button__subtitle\">\n                                [ {{ _table.loadedRows$() }} / {{ _dataSourceDirective.totalItems$() }} ]\n                            </div>\n                        }\n                    </div>\n                </div>\n            </a>\n        </div>\n    } @else if (_table.loadedRows$() === _dataSourceDirective.totalItems$() && showItemsCount) {\n        <li\n            fd-list-item\n            [style.height]=\"'auto'\"\n            ariaRole=\"none\"\n            class=\"fdp-table__growing-button-content fdp-table__growing-button-total\"\n        >\n            <span fd-list-title>\n                {{\n                    (\n                        'platformTable.showingBlankOfBlank'\n                        | fdTranslate: { totalGrowingItemsCount: _table.loadedRows$() }\n                    )()\n                }}\n            </span>\n        </li>\n    }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-table-footer-row]',\n    templateUrl: './table-footer-row.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableFooterRowComponent extends TableRowDirective {\n    /** @hidden */\n    readonly _fdpTableService = inject(TableService);\n}\n","@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n    <td class=\"fd-table__cell\" tabindex=\"-1\">\n        @if (column?.footerLabel) {\n            <span class=\"fd-table__cell--truncate-txt\">\n                {{ column.footerLabel }}\n            </span>\n        } @else if (column?.footerCellTemplate && column.footerCellTemplate !== undefined) {\n            <ng-template\n                [ngTemplateOutlet]=\"column.footerCellTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: column }\"\n            ></ng-template>\n        }\n    </td>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChildren,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport {\n    FDK_FOCUSABLE_ITEM_DIRECTIVE,\n    FDK_FOCUSABLE_LIST_DIRECTIVE,\n    FocusableItemDirective,\n    Nullable\n} from '@fundamental-ngx/cdk/utils';\nimport { TableCellDirective, TableRowDirective } from '@fundamental-ngx/core/table';\nimport { TableColumn, TableRow, TableService } from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-table-group-row]',\n    templateUrl: './table-group-row.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n            useExisting: TableGroupRowComponent\n        }\n    ],\n    host: {\n        role: 'row',\n        '[attr.aria-expanded]': 'row.expanded'\n    },\n    imports: [TableCellDirective, NgTemplateOutlet]\n})\nexport class TableGroupRowComponent<T> extends TableRowDirective implements OnChanges {\n    /** Table ID. */\n    @Input()\n    rowId: string;\n    /** Row index. */\n    @HostBinding('attr.aria-rowindex')\n    @Input()\n    index: number;\n\n    /** Row height. */\n    @HostBinding('style.height.px')\n    @Input()\n    height: number;\n\n    /** Whether the row is draggable. */\n    @HostBinding('class.fd-table__row--draggable')\n    @Input()\n    draggable = false;\n\n    /** Table Row. */\n    @Input()\n    row: TableRow<T>;\n\n    /** Key to column mapping. */\n    @Input()\n    keyToColumnMap: Map<string, TableColumn>;\n\n    /** Event emitted when group row expansion state needs to be toggled. */\n    @Output()\n    toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n    /** @hidden */\n    _column: Nullable<TableColumn>;\n\n    /** @hidden */\n    @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n    private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n        this.setItems(items.toArray());\n    }\n\n    /** @hidden */\n    readonly _fdpTableService = inject(TableService);\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('row' in changes || 'keyToColumnMap' in changes) {\n            this._column = this.keyToColumnMap.get(this.row.value?.['field']);\n        }\n    }\n}\n","<td\n    fd-table-cell\n    class=\"fd-table__cell--group fd-table__cell--expand\"\n    tabindex=\"0\"\n    role=\"gridcell\"\n    [focusable]=\"true\"\n    colspan=\"100%\"\n    [attr.aria-expanded]=\"row.expanded\"\n    [attr.data-nesting-level]=\"row.level + 1\"\n    (keydown.enter)=\"toggleGroupRow.emit(row)\"\n    (keydown.space)=\"toggleGroupRow.emit(row)\"\n    (click)=\"toggleGroupRow.emit(row)\"\n>\n    <ng-template [ngTemplateOutlet]=\"tableCellExpandTemplate\"></ng-template>\n</td>\n<!-- Table Cell Expand Template -->\n<ng-template #tableCellExpandTemplate>\n    <div class=\"fd-table__expand-wrapper\">\n        <span class=\"fd-table__expand\" [class.fd-table__expand--open]=\"row.expanded\" aria-hidden=\"true\"></span>\n        @if (_fdpTableService.groupRules$(); as groupRules) {\n            <!-- Group row template when no nested groups -->\n            @if (groupRules.size === 1) {\n                <div class=\"fd-table__text fd-table__text--no-wrap\">\n                    {{ row.value?.['value'] }} - {{ row.value?.['count'] }}\n                </div>\n            }\n            <!-- Group row template when there are nested groups -->\n            @if (groupRules.size !== 1) {\n                <div class=\"fd-table__text fd-table__text--no-wrap\">\n                    <ng-template [ngTemplateOutlet]=\"tableHeaderCellContentTemplate\"></ng-template>:\n                    {{ row.value?.['value'] }}\n                </div>\n            }\n        }\n    </div>\n</ng-template>\n<!-- Column Header Cell Content Template  -->\n<ng-template #tableHeaderCellContentTemplate>\n    @if (_column) {\n        @if (_column.headerCellTemplate) {\n            <ng-template\n                [ngTemplateOutlet]=\"_column.headerCellTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: _column }\"\n            ></ng-template>\n        } @else {\n            <span\n                [id]=\"rowId + '-header-cell-' + _column.name\"\n                [attr.title]=\"_column.label\"\n                class=\"fd-table__cell--truncate-txt\"\n                >{{ _column.label }}</span\n            >\n        }\n    }\n</ng-template>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    OnInit,\n    Pipe,\n    PipeTransform,\n    QueryList,\n    ViewChildren,\n    ViewEncapsulation,\n    computed,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n    DisabledBehaviorDirective,\n    FDK_FOCUSABLE_ITEM_DIRECTIVE,\n    FDK_FOCUSABLE_LIST_DIRECTIVE,\n    FocusableItemDirective,\n    RtlService\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { PopoverTriggerDirective } from '@fundamental-ngx/core/popover';\nimport { TableCellDirective, TableRowDirective, TableStatusIndicatorDirective } from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n    ColumnResizableSidePipe,\n    PlatformTableCellResizableDirective,\n    SelectionCellStylesPipe,\n    SelectionMode,\n    SelectionModeValue,\n    SortDirection,\n    TableCellStylesPipe,\n    TableColumn,\n    TableColumnResizeService,\n    TableColumnSortingDirectionPipe,\n    TableRowService,\n    TableService\n} from '@fundamental-ngx/platform/table-helpers';\nimport { TableCellHeaderPopoverComponent } from '../table-cell-header-popover/table-cell-header-popover.component';\nimport { TableHeaderCellContentComponent } from '../table-header-cell-content/table-header-cell-content.component';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-table-header-row]',\n    templateUrl: './table-header-row.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n            useExisting: TableHeaderRowComponent\n        }\n    ],\n    host: {\n        role: 'row'\n    },\n    imports: [\n        TableCellDirective,\n        TableStatusIndicatorDirective,\n        DisabledBehaviorDirective,\n        CheckboxComponent,\n        FormsModule,\n        PlatformTableCellResizableDirective,\n        NgClass,\n        NgStyle,\n        PopoverTriggerDirective,\n        TableHeaderCellContentComponent,\n        TableCellHeaderPopoverComponent,\n        FdTranslatePipe,\n        SelectionCellStylesPipe,\n        TableCellStylesPipe,\n        ColumnResizableSidePipe,\n        TableColumnSortingDirectionPipe,\n        forwardRef(() => IsColumnHasHeaderMenuPipe)\n    ],\n    // TODO: to be removed after bumping to latest styles and using the class from there\n    styles: `\n        .fd-table__sr-only {\n            position: absolute;\n            clip: rect(0, 0, 0, 0);\n            height: 1px;\n            width: 1px;\n            border: 0;\n            margin: -1px;\n            padding: 0;\n            overflow: hidden;\n            white-space: nowrap;\n        }\n    `\n})\nexport class TableHeaderRowComponent extends TableRowDirective implements OnInit {\n    /** Table ID. */\n    @Input()\n    rowId: string;\n\n    /**\n     * Whether to fix the table header and footer. Default is true.\n     * Note that if the table contains freezable columns, the header and\n     * footer will be fixed automatically, regardless of this input value.\n     * */\n    @Input()\n    fixed: boolean;\n\n    /**\n     * Whether to show selection column.\n     */\n    @Input()\n    isShownSelectionColumn: boolean;\n\n    /**\n     * Row checked state.\n     */\n    @Input()\n    checkedState: boolean | null;\n\n    /**\n     * Selection mode.\n     */\n    @Input()\n    selectionMode: SelectionModeValue;\n\n    /**\n     * Selection column width.\n     */\n    @Input()\n    selectionColumnWidth: number;\n\n    /** The column `name` to freeze columns up to and including. */\n    @Input()\n    freezeColumnsTo: string;\n\n    /** Table without horizontal borders. */\n    @Input()\n    noHorizontalBorders = false;\n\n    /** Table without vertical borders. */\n    @Input()\n    noVerticalBorders = false;\n\n    /** Table without borders. */\n    @Input()\n    noBorders = false;\n\n    /** The column `name` to freeze columns after and including. */\n    @Input()\n    freezeEndColumnsTo: string;\n\n    /** @hidden */\n    @Input()\n    disableSelectionCheckbox = false;\n\n    /** @hidden */\n    @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n    private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n        this.setItems(items.toArray());\n    }\n\n    /** @hidden */\n    readonly SELECTION_MODE = SelectionMode;\n\n    /** @hidden */\n    readonly SORT_DIRECTION = SortDirection;\n\n    /** @hidden */\n    readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n    /** @hidden */\n    readonly _fdpTableService = inject(TableService);\n\n    /** @hidden */\n    readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n    /** @hidden */\n    readonly _tableRowService = inject(TableRowService);\n\n    /** @hidden */\n    protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _cdr = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n        this._tableColumnResizeService.markForCheck.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._cdr.detectChanges();\n        });\n    }\n\n    /** @hidden */\n    _columnTrackBy(index: number, column: TableColumn): string {\n        return column.name;\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'isColumnHasHeaderMenu',\n    standalone: true\n})\nexport class IsColumnHasHeaderMenuPipe implements PipeTransform {\n    /** @hidden */\n    private readonly _fdpTableService = inject(TableService);\n\n    /** @hidden */\n    transform(column: TableColumn): boolean {\n        return (\n            column.sortable ||\n            column.groupable ||\n            column.freezable ||\n            column.endFreezable ||\n            (column.filterable && !this._fdpTableService._isFilteringFromHeaderDisabled$())\n        );\n    }\n}\n","@if (_fdpTableService._semanticHighlighting$()) {\n    <th\n        [class.fd-table__cell--fixed]=\"fixed\"\n        class=\"fd-table__cell\"\n        [ngClass]=\"{\n            'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n            'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n        }\"\n        fd-table-status-indicator\n        fdkDisabled\n        [style.min-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n        [style.max-width]=\"_fdpTableService._semanticHighlightingColumnWidth$()\"\n    ></th>\n}\n\n@if (isShownSelectionColumn) {\n    <th\n        fd-table-cell\n        [ngClass]=\"{\n            'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n            'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n        }\"\n        [focusable]=\"true\"\n        [class.fd-table__cell--fixed]=\"fixed\"\n        class=\"fd-table__cell--checkbox\"\n        [style]=\"\n            _contentDensityObserver.contentDensity$()\n                | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n        \"\n        (keydown.enter)=\"\n            selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState)\n        \"\n        (keydown.space)=\"\n            selectionMode === SELECTION_MODE.MULTIPLE && _tableRowService.toggleAllSelectableRows(!checkedState);\n            $event.preventDefault()\n        \"\n        (cellFocused)=\"_tableRowService.cellFocused($event)\"\n        [attr.title]=\"\n            !checkedState\n                ? ('platformTable.selectAllCheckboxLabel' | fdTranslate)()\n                : ('platformTable.deselectAllCheckboxLabel' | fdTranslate)()\n        \"\n        [attr.aria-description]=\"\n            checkedState\n                ? ('platformTable.deselectAllCheckboxLongLabel' | fdTranslate)()\n                : checkedState === null\n                  ? ('platformTable.selectAllCheckboxMixedLongLabel' | fdTranslate)()\n                  : ('platformTable.selectAllCheckboxLongLabel' | fdTranslate)()\n        \"\n    >\n        @if (selectionMode === SELECTION_MODE.MULTIPLE) {\n            <fd-checkbox\n                tabIndexValue=\"-1\"\n                labelClass=\"fd-table__checkbox-label\"\n                [fdkDisabled]=\"_fdpTableService.visibleColumnsLength() === 0 || disableSelectionCheckbox\"\n                [tristate]=\"true\"\n                [tristateSelectable]=\"false\"\n                [ngModel]=\"checkedState\"\n                (ngModelChange)=\"_tableRowService.toggleAllSelectableRows($event)\"\n            ></fd-checkbox>\n        }\n    </th>\n}\n\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n    <th\n        [focusable]=\"true\"\n        role=\"columnheader\"\n        [fdpTableCellResizable]=\"\n            $index\n                | columnResizableSide\n                    : _fdpTableService.visibleColumnsLength()\n                    : _fdpTableService._isShownNavigationColumn$()\n        \"\n        [columnName]=\"column.name\"\n        [id]=\"rowId + '__' + column.name\"\n        [attr.aria-colindex]=\"$index\"\n        [attr.aria-sort]=\"_fdpTableService.sortRules$().get(column.key) | fdpTableColumnSortingDirection\"\n        [class.fd-table__cell--non-interactive]=\"column.nonInteractive\"\n        [ngClass]=\"[\n            'fdp-table__col--' + column.name,\n            column._freezed ? 'fd-table__cell--fixed' : '',\n            column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n            column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n            column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n            $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : '',\n            (column | isColumnHasHeaderMenu) ? 'fd-table__item--clickable' : ''\n        ]\"\n        [ngStyle]=\"\n            column\n                | tableCellStyles\n                    : isRtl()\n                    : _fdpTableService._semanticHighlightingColumnWidth$()\n                    : selectionColumnWidth\n                    : column._freezed\n                    : column._endFreezed\n                    : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n                    : _tableColumnResizeService.getColumnWidthStyle(column.name)\n                    : _tableColumnResizeService.getNextColumnsWidth(column.name)\n                    : noBorders\n                    : noHorizontalBorders\n                    : noVerticalBorders\n        \"\n        [fdPopoverTrigger]=\"(column | isColumnHasHeaderMenu) ? tablePopover.popover : null\"\n        (cellFocused)=\"_tableRowService.cellFocused($event)\"\n        (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n        (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n    >\n        <fdp-table-header-cell-content [id]=\"rowId\" [column]=\"column\" [attr.title]=\"column.label\">\n            <!-- Header menu -->\n            <fdp-table-cell-header-popover\n                #tablePopover\n                [disabled]=\"!(column | isColumnHasHeaderMenu)\"\n                [columnFrozen]=\"column._freezed || column._endFreezed\"\n                [column]=\"column\"\n                [columnIndex]=\"$index\"\n                [popoverTemplate]=\"(column | isColumnHasHeaderMenu) ? column.headerCellPopoverTemplate : null\"\n                [filteringFromHeaderDisabled]=\"_fdpTableService._isFilteringFromHeaderDisabled$()\"\n            ></fdp-table-cell-header-popover>\n        </fdp-table-header-cell-content>\n    </th>\n}\n\n@if (_fdpTableService._isShownNavigationColumn$()) {\n    <th\n        [ngClass]=\"{\n            'fd-table__cell--no-horizontal-border': noHorizontalBorders || noBorders,\n            'fd-table__cell--no-vertical-border': noVerticalBorders || noBorders\n        }\"\n        class=\"fd-table__cell fdp-table__cell--navigation is-last-child\"\n        role=\"columnheader\"\n        tabindex=\"-1\"\n    >\n        <span class=\"fd-table__sr-only\">\n            {{ ('platformTable.navigationColumnTitle' | fdTranslate)() }}\n        </span>\n    </th>\n}\n\n<th\n    aria-hidden=\"true\"\n    class=\"fd-table__cell fd-table__cell--mock\"\n    [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n    fdkDisabled\n></th>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    QueryList,\n    ViewChildren,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport {\n    DisabledBehaviorDirective,\n    FDK_FOCUSABLE_ITEM_DIRECTIVE,\n    FDK_FOCUSABLE_LIST_DIRECTIVE,\n    FocusableItem,\n    FocusableItemDirective,\n    ValueByPathPipe\n} from '@fundamental-ngx/cdk/utils';\nimport { FormLabelComponent } from '@fundamental-ngx/core/form';\nimport {\n    TableCellDirective,\n    TableRowDirective,\n    TableStatusIndicatorDirective,\n    TableTextDirective\n} from '@fundamental-ngx/core/table';\nimport {\n    SelectionMode,\n    SelectionModeValue,\n    TableRow,\n    TableService,\n    isTreeRow,\n    isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-table-popping-row]',\n    templateUrl: './table-popping-row.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n            useExisting: TablePoppingRowComponent\n        }\n    ],\n    host: {\n        role: 'row',\n        '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n    },\n    imports: [\n        TableCellDirective,\n        DisabledBehaviorDirective,\n        TableTextDirective,\n        FormLabelComponent,\n        NgTemplateOutlet,\n        ValueByPathPipe,\n        TableStatusIndicatorDirective\n    ]\n})\nexport class TablePoppingRowComponent<T> extends TableRowDirective {\n    /** Table Row. */\n    @Input()\n    row: TableRow<T>;\n\n    /** Whether the row is selected. */\n    @HostBinding('attr.aria-selected')\n    @Input()\n    checked: boolean | null;\n\n    /** Current selection mode. */\n    @Input()\n    selectionMode: SelectionModeValue;\n\n    /** Event emitted when group row expansion state needs to be toggled. */\n    @Output()\n    toggleGroupRow = new EventEmitter<TableRow<T>>();\n\n    /** Event emitted when cell being clicked on. */\n    @Output()\n    cellClicked = new EventEmitter<{ index: number; row: TableRow<T> }>();\n\n    /** @hidden */\n    @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n    private set _focusableCellItems(items: QueryList<FocusableItemDirective>) {\n        this.setItems(items.toArray());\n    }\n\n    /** @hidden */\n    readonly SELECTION_MODE = SelectionMode;\n\n    /** @hidden */\n    readonly _isTreeRow = isTreeRow;\n\n    /** @hidden */\n    readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n    /** @hidden */\n    readonly _fdpTableService = inject(TableService);\n\n    /** Set items programmatically. */\n    setItems(items: ReadonlyArray<FocusableItem>): void {\n        this._itemsOverride.set(items);\n    }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n    <td\n        class=\"fd-table__cell\"\n        fd-table-status-indicator\n        [status]=\"row.value[semanticHighlighting]\"\n        tabindex=\"-1\"\n        aria-hidden=\"true\"\n    ></td>\n}\n\n@if (selectionMode !== SELECTION_MODE.NONE) {\n    <td class=\"fd-table__cell\" tabindex=\"-1\" aria-hidden=\"true\"></td>\n}\n\n<td\n    fd-table-cell\n    colspan=\"100%\"\n    [attr.data-nesting-level]=\"row.level + 1\"\n    [attr.aria-expanded]=\"_isTreeRow(row) ? row.expanded : null\"\n    (click)=\"cellClicked.emit({ index: 0, row })\"\n    (keydown.enter)=\"_isTreeRowFirstCell(0, row, $event) && toggleGroupRow.emit(row)\"\n    [focusable]=\"true\"\n>\n    @for (poppingColumn of _fdpTableService.poppingColumns$(); track poppingColumn.name) {\n        <div fd-table-text>\n            @if (poppingColumn?.label?.length) {\n                <label fd-form-label>{{ poppingColumn.label }}:</label>\n            }\n\n            @if (poppingColumn?.columnCellTemplate) {\n                <ng-template\n                    [ngTemplateOutlet]=\"poppingColumn.columnCellTemplate!\"\n                    [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: true, rowIndex: row.index }\"\n                ></ng-template>\n            } @else {\n                {{ row.value | valueByPath: poppingColumn.key }}\n            }\n        </div>\n    }\n</td>\n","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { set } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { InputComponent, PlatformDatePickerComponent, SwitchComponent } from '@fundamental-ngx/platform/form';\nimport { EditableTableCell, TableColumn, TableRow } from '@fundamental-ngx/platform/table-helpers';\n\nlet controlUniqId = 0;\n\n@Component({\n    selector: 'fdp-table-editable-cell',\n    templateUrl: './table-editable-cell.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: EditableTableCell, useExisting: TableEditableCellComponent }],\n    imports: [FormsModule, InputComponent, PlatformDatePickerComponent, SwitchComponent, FdTranslatePipe]\n})\nexport class TableEditableCellComponent implements EditableTableCell {\n    /** Table row definition. */\n    @Input()\n    row: TableRow;\n\n    /** Table cell definition. */\n    @Input()\n    column: TableColumn;\n\n    /** Column value. */\n    @Input()\n    set columnValue(value: any) {\n        this._columnValue = value;\n        set(this.row.value, this.column.key, value);\n    }\n\n    get columnValue(): any {\n        return this._columnValue;\n    }\n\n    /** Editable cell form. */\n    @ViewChild(NgForm)\n    form: NgForm;\n\n    /** @hidden */\n    _controlUniqName = `input-${controlUniqId++}`;\n\n    /** @hidden */\n    private _columnValue: any;\n}\n","<form #ngForm>\n    @switch (column.dataType) {\n        @case ('number') {\n            <fdp-input\n                [placeholder]=\"('platformTable.editableCellNumberPlaceholder' | fdTranslate)()\"\n                [(ngModel)]=\"columnValue\"\n                [name]=\"_controlUniqName\"\n                type=\"number\"\n            ></fdp-input>\n        }\n        @case ('date') {\n            <fdp-date-picker\n                type=\"single\"\n                [placeholder]=\"('platformTable.editableCellDatePlaceholder' | fdTranslate)()\"\n                [name]=\"_controlUniqName\"\n                [allowNull]=\"false\"\n                [(ngModel)]=\"columnValue\"\n            ></fdp-date-picker>\n        }\n        @case ('boolean') {\n            <fdp-switch [(ngModel)]=\"columnValue\" [name]=\"_controlUniqName\"></fdp-switch>\n        }\n        @default {\n            <fdp-input\n                [placeholder]=\"('platformTable.editableCellStringPlaceholder' | fdTranslate)()\"\n                [(ngModel)]=\"columnValue\"\n                [name]=\"_controlUniqName\"\n                type=\"text\"\n            ></fdp-input>\n        }\n    }\n</form>\n","import { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { AsyncPipe, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChildren,\n    ViewEncapsulation,\n    computed,\n    inject,\n    signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n    DisabledBehaviorDirective,\n    FDK_FOCUSABLE_ITEM_DIRECTIVE,\n    FDK_FOCUSABLE_LIST_DIRECTIVE,\n    FocusableItemDirective,\n    FocusableItemPosition,\n    KeyUtil,\n    RtlService,\n    ValueByPathPipe,\n    destroyObservable,\n    get,\n    uuidv4\n} from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n    TableCellDirective,\n    TableIconDirective,\n    TableRowDirective,\n    TableStatusIndicatorDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n    ColumnResizableSidePipe,\n    EditableTableCell,\n    PlatformTableCellResizableDirective,\n    SelectionCellStylesPipe,\n    SelectionMode,\n    SelectionModeValue,\n    TableCellStylesPipe,\n    TableColumn,\n    TableColumnResizeService,\n    TableDraggableDirective,\n    TableRow,\n    TableRowKeyboardDrag,\n    TableRowService,\n    TableService,\n    isTreeRow,\n    isTreeRowFirstCell\n} from '@fundamental-ngx/platform/table-helpers';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { TableEditableCellComponent } from '../table-editable-cell/table-editable-cell.component';\n\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: '[fdp-table-row]',\n    templateUrl: './table-row.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: FDK_FOCUSABLE_LIST_DIRECTIVE,\n            useExisting: TableRowComponent\n        }\n    ],\n    host: {\n        role: 'row',\n        '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'\n    },\n    imports: [\n        TableCellDirective,\n        TableStatusIndicatorDirective,\n        DisabledBehaviorDirective,\n        NgStyle,\n        NgTemplateOutlet,\n        CheckboxComponent,\n        FormsModule,\n        PlatformTableCellResizableDirective,\n        NgClass,\n        TableEditableCellComponent,\n        TableIconDirective,\n        AsyncPipe,\n        ValueByPathPipe,\n        FdTranslatePipe,\n        SelectionCellStylesPipe,\n        TableCellStylesPipe,\n        ColumnResizableSidePipe,\n        IconComponent\n    ]\n})\nexport class TableRowComponent<T> extends TableRowDirective implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n    /** Row ID. */\n    @Input()\n    rowId: string;\n\n    /** Table Row. */\n    @Input()\n    row: TableRow<T>;\n\n    /** Row index. */\n    @Input()\n    index: number;\n\n    /** Selection mode. */\n    @Input()\n    selectionMode: SelectionModeValue;\n\n    /** Selectable flag key. */\n    @Input()\n    selectableKey: string;\n\n    /** Whether to enable checkbox tristate mode. */\n    @Input()\n    enableTristateMode: boolean;\n\n    /**\n     * Whether to fix the table header and footer. Default is true.\n     * Note that if the table contains freezable columns, the header and\n     * footer will be fixed automatically, regardless of this input value.\n     * */\n    @Input()\n    fixed: boolean;\n\n    /** Selection column width. */\n    @Input()\n    selectionColumnWidth: number;\n\n    /** The column `name` to freeze columns up to and including. */\n    @Input()\n    freezeColumnsTo: string;\n\n    /** The column `name` to freeze columns after and including. */\n    @Input()\n    freezeEndColumnsTo: string;\n\n    /**\n     * Event emitted when keyboard drag performed.\n     */\n    @Output()\n    keyboardDrag = new EventEmitter<TableRowKeyboardDrag>();\n\n    /** @hidden */\n    @ViewChildren(FDK_FOCUSABLE_ITEM_DIRECTIVE)\n    private set _focusableViewCellItems(items: QueryList<FocusableItemDirective>) {\n        this.setItems(items.toArray());\n    }\n\n    /** @hidden */\n    @ViewChildren(EditableTableCell)\n    private readonly _editableCells: QueryList<EditableTableCell>;\n\n    /** @hidden */\n    @HostBinding('attr.aria-selected')\n    protected get _ariaSelected(): boolean {\n        return !!this.row.checked;\n    }\n\n    /** @hidden */\n    _hasRowHeaderColumn$ = computed(() => this._fdpTableService.visibleColumns$().some((c) => c.role === 'rowheader'));\n\n    /** @hidden */\n    _rowSelectionHelperTextId = `rowSelectionHelper-${uuidv4()}`;\n\n    /** @hidden */\n    readonly _announceEmptyCell = signal(false);\n\n    /** @hidden */\n    readonly _isTreeRowFirstCell = isTreeRowFirstCell;\n\n    /** @hidden */\n    readonly SELECTION_MODE = SelectionMode;\n\n    /** @hidden */\n    readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n    /** @hidden */\n    readonly _tableColumnResizeService = inject(TableColumnResizeService);\n\n    /** @hidden */\n    readonly _fdpTableService = inject(TableService);\n\n    /** @hidden */\n    readonly _tableRowService = inject(TableRowService);\n\n    /** @hidden */\n    readonly _isTreeRow = isTreeRow;\n\n    /** @hidden */\n    protected readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    protected readonly navigationIcon = computed(() => (this.isRtl() ? 'slim-arrow-left' : 'slim-arrow-right'));\n\n    /** @hidden */\n    protected readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _refreshChildRows$ = new Subject<void>();\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _cdr = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    private readonly _zone = inject(NgZone);\n\n    /** @hidden */\n    private readonly _elmRef = inject(ElementRef);\n\n    /** @hidden */\n    private readonly _dndTableDirective = inject(TableDraggableDirective, {\n        optional: true\n    });\n\n    /** @hidden */\n    constructor() {\n        super();\n        this._tableColumnResizeService.resizeInProgress$\n            .pipe(\n                switchMap(() => this._tableColumnResizeService.markForCheck),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe(() => {\n                this._cdr.markForCheck();\n            });\n\n        this._zone.runOutsideAngular(() => {\n            fromEvent<KeyboardEvent>(this._elmRef.nativeElement, 'keydown')\n                .pipe(\n                    filter(() => !!this._dndTableDirective),\n                    takeUntilDestroyed(this._destroyRef)\n                )\n                .subscribe((event) => {\n                    this._onKeyDown(event);\n                });\n        });\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        super.ngOnInit();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n        this._editableCells.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            const cells = this._editableCells.toArray();\n            if (cells.length > 0) {\n                this._tableRowService.updateEditableCells(this.row, cells);\n            } else {\n                this._tableRowService.removeEditableCells(this.row);\n            }\n        });\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('row' in changes) {\n            this._listenToRowExpansion();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n        this._refreshChildRows$.next();\n        this._refreshChildRows$.complete();\n        this._tableRowService.removeEditableCells(this.row);\n    }\n\n    /** @hidden */\n    _toggleGroupRow(): void {\n        this._tableRowService.toggleRow({ type: 'toggleRow', row: this.row });\n    }\n\n    /** @hidden */\n    _toggleSingleSelectableRow(event?: Event): void {\n        event?.preventDefault();\n        this._tableRowService.toggleRow({ type: 'toggleSingleSelectableRow', row: this.row });\n    }\n\n    /** @hidden */\n    _toggleMultiSelectRow(row: TableRow<T>, event?: Event): void {\n        event?.preventDefault();\n        this._tableRowService.toggleRow({ ...{ row, event }, ...{ type: 'toggleMultiSelectRow' } });\n    }\n\n    /** @hidden */\n    _columnTrackBy(index: number, column: TableColumn): string {\n        return column.name;\n    }\n\n    /** @hidden */\n    _itemFocusedEventAnnouncer = (position: FocusableItemPosition): string => {\n        let retVal = `Column ${position.colIndex + 1} of ${position.totalCols}, `;\n        let column;\n        if (this._fdpTableService?.visibleColumns$) {\n            let colIndex = position.colIndex;\n            if (this.selectionMode === 'single' || this.selectionMode === 'multiple') {\n                colIndex--;\n            }\n            column = this._fdpTableService.visibleColumns$()[colIndex];\n        }\n        if (column && (column._freezed || column._endFreezed)) {\n            retVal = retVal + 'fixed, ';\n        }\n        retVal = retVal + `row: ${position.rowIndex + 1} of ${position.totalRows}`;\n        if (this._isTreeRow(this.row) || this.row.level > 0) {\n            retVal = retVal + ', level ' + (this.row.level + 1);\n        }\n        return retVal;\n    };\n\n    /** @hidden */\n    _handleCellFocused(\n        event: FocusableItemPosition,\n        index: number,\n        row: TableRow<T>,\n        column: TableColumn,\n        tableTextContainer: HTMLElement\n    ): void {\n        this._setAnnounceEmptyCell(row, column, tableTextContainer);\n        this._tableRowService.cellFocused(event);\n        this._tableRowService.cellActivate(index, row);\n    }\n\n    /** @hidden */\n    protected _handleCellSpaceKey(colIdx: number, tableCellElement: HTMLTableCellElement, $event: Event): void {\n        if ($event.target === tableCellElement && isTreeRowFirstCell(colIdx, this.row, $event)) {\n            $event.preventDefault();\n            this._toggleGroupRow();\n        }\n    }\n\n    /** @hidden */\n    private _listenToRowExpansion(): void {\n        this._refreshChildRows$.next();\n        const refresh = merge(this._refreshChildRows$, destroyObservable(this._destroyRef));\n        // Load items only once. Further loading will be covered by the lazy loading functionality.\n        this.row?.expanded$\n            ?.pipe(\n                filter((expanded) => expanded && this.row.children.length === 0),\n                takeUntil(refresh)\n            )\n            .subscribe(() => {\n                this._tableRowService.loadChildRows(this.row);\n            });\n    }\n\n    /** @hidden */\n    private _onKeyDown(event: KeyboardEvent): void {\n        const isArrowDown = KeyUtil.isKeyCode(event, DOWN_ARROW);\n        const isArrowUp = KeyUtil.isKeyCode(event, UP_ARROW);\n\n        if (!event.altKey) {\n            return;\n        }\n\n        if (!isArrowDown && !isArrowUp) {\n            return;\n        }\n\n        this._dndTableDirective?.dragRowFromKeyboard(\n            isArrowDown ? 'down' : 'up',\n            event,\n            this.index,\n            event.shiftKey ? 'group' : 'shift'\n        );\n    }\n\n    /** @hidden */\n    private _setAnnounceEmptyCell(row: TableRow<T>, column: TableColumn, tableTextContainer: HTMLElement): void {\n        if (row.state !== 'readonly') {\n            this._announceEmptyCell.set(false);\n            return;\n        }\n\n        // If cell contains elements with explicit accessible names, don't announce as empty\n        if (this._hasAccessibleContent(tableTextContainer)) {\n            this._announceEmptyCell.set(false);\n            return;\n        }\n\n        let value: string;\n        // For non-column templates (data-driven), always check for empty content.\n        const isCellEmptyInNonColumnTemplate =\n            !column.columnCellTemplate &&\n            (!(value = get(row.value, column.key)) || (typeof value === 'string' && value.trim() === ''));\n\n        // For column templates (consumer-provided), check text content by default.\n        // Otherwise, determined by consumer by disabling default checking.\n        const isCellEmptyInColumnTemplate =\n            column.columnCellTemplate && column.announceEmptyCell() && tableTextContainer?.innerText?.trim() === '';\n\n        this._announceEmptyCell.set(isCellEmptyInColumnTemplate || isCellEmptyInNonColumnTemplate);\n    }\n\n    /** @hidden Checks if container has elements with explicit accessible names (aria-label, aria-labelledby) */\n    private _hasAccessibleContent(container: HTMLElement): boolean {\n        return !!container?.querySelector('[aria-label], [aria-labelledby]');\n    }\n}\n","@if (_fdpTableService._semanticHighlighting$(); as semanticHighlighting) {\n    <td\n        class=\"fd-table__cell\"\n        fd-table-status-indicator\n        fdkDisabled\n        [addDisabledClass]=\"false\"\n        [status]=\"row.value[semanticHighlighting]\"\n    ></td>\n}\n<!-- hidden text for screenreader -->\n<ng-template #selectionScreenReaderText>\n    <span\n        aria-hidden=\"true\"\n        [attr.id]=\"_rowSelectionHelperTextId\"\n        [ngStyle]=\"{\n            position: 'absolute !important',\n            height: '1px',\n            width: '1px',\n            overflow: 'hidden',\n            clip: 'rect(1px, 1px, 1px, 1px)',\n            color: 'transparent',\n            display: 'block'\n        }\"\n    >\n        {{ ((row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate)() }}\n    </span>\n</ng-template>\n<!-- Row Selection Cell -->\n@if (selectionMode === SELECTION_MODE.SINGLE) {\n    @if (row.value[selectableKey] !== false) {\n        <td\n            class=\"fd-table__cell--checkbox\"\n            [class.fd-table__cell--fixed]=\"fixed\"\n            [attr.role]=\"_hasRowHeaderColumn$() ? 'rowheader' : 'gridcell'\"\n            fd-table-cell\n            [focusable]=\"true\"\n            [style]=\"\n                _contentDensityObserver.contentDensity$()\n                    | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n            \"\n            [attr.aria-selected]=\"row.checked\"\n            [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n            (click)=\"_toggleSingleSelectableRow()\"\n            (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n            (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n            [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n        >\n            <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n        </td>\n    } @else {\n        <td\n            class=\"fd-table__cell--checkbox\"\n            role=\"gridcell\"\n            fd-table-cell\n            fdkDisabled\n            [addDisabledClass]=\"false\"\n            [class.fd-table__cell--fixed]=\"fixed\"\n            [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n        ></td>\n    }\n} @else if (selectionMode === SELECTION_MODE.MULTIPLE) {\n    @if (row.value[selectableKey] !== false) {\n        <td\n            class=\"fd-table__cell--checkbox\"\n            [class.fd-table__cell--fixed]=\"fixed\"\n            [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n            role=\"cell\"\n            fd-table-cell\n            [focusable]=\"true\"\n            (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n            (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n            [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n            [attr.aria-selected]=\"row.checked\"\n            [style]=\"\n                _contentDensityObserver.contentDensity$()\n                    | selectionCellStyles: isRtl() : _fdpTableService._semanticHighlightingColumnWidth$()\n            \"\n        >\n            <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n            <fd-checkbox\n                tabIndexValue=\"-1\"\n                labelClass=\"fd-table__checkbox-label\"\n                [tristate]=\"enableTristateMode\"\n                [tristateSelectable]=\"false\"\n                [ngModel]=\"row.checked$ | async\"\n                (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n            ></fd-checkbox>\n        </td>\n    } @else {\n        <td\n            class=\"fd-table__cell--checkbox\"\n            role=\"gridcell\"\n            fd-table-cell\n            fdkDisabled\n            [addDisabledClass]=\"false\"\n            [class.fd-table__cell--fixed]=\"fixed\"\n            [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n        ></td>\n    }\n}\n@for (column of _fdpTableService.visibleColumns$(); track column.name) {\n    <td\n        #tableCellElement\n        fd-table-cell\n        [fdpTableCellResizable]=\"\n            $index\n                | columnResizableSide\n                    : _fdpTableService.visibleColumnsLength()\n                    : _fdpTableService._isShownNavigationColumn$()\n        \"\n        [columnName]=\"column.name\"\n        [focusable]=\"true\"\n        [attr.role]=\"column.role\"\n        [headers]=\"rowId + '__' + column.name\"\n        [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n        [ngClass]=\"[\n            'fdp-table__col--' + column.name,\n            column._freezed ? 'fd-table__cell--fixed' : '',\n            column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n            column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n            column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n            row.isTree && $index === 0 ? 'fd-table__cell--expand' : '',\n            $last && !_fdpTableService._isShownNavigationColumn$() ? 'is-last-child' : ''\n        ]\"\n        [ngStyle]=\"\n            column\n                | tableCellStyles\n                    : isRtl()\n                    : _fdpTableService._semanticHighlightingColumnWidth$()\n                    : selectionColumnWidth\n                    : column._freezed\n                    : column._endFreezed\n                    : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n                    : _tableColumnResizeService.getColumnWidthStyle(column.name)\n                    : _tableColumnResizeService.getNextColumnsWidth(column.name)\n        \"\n        [attr.aria-expanded]=\"_isTreeRowFirstCell($index, row) ? row.expanded : null\"\n        [attr.data-nesting-level]=\"$index === 0 ? row.level + 1 : null\"\n        (cellFocused)=\"_handleCellFocused($event, $index, row, column, tableTextContainer)\"\n        (focusout)=\"_announceEmptyCell.set(false)\"\n        (click)=\"_tableRowService.cellClicked({ index: $index, row })\"\n        (keydown.enter)=\"_isTreeRowFirstCell($index, row, $event) && _toggleGroupRow()\"\n        (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n        (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n        (keydown.space)=\"_handleCellSpaceKey($index, tableCellElement, $event)\"\n        [attr.title]=\"\n            _isTreeRowFirstCell($index, row) && row.expanded\n                ? ('platformTable.collapseRowButtonTitle' | fdTranslate)()\n                : _isTreeRowFirstCell($index, row) && !row.expanded\n                  ? ('platformTable.expandRowButtonTitle' | fdTranslate)()\n                  : null\n        \"\n    >\n        <div\n            [class.fd-table__text]=\"column.applyText\"\n            [class.fd-table__text--no-wrap]=\"column.noWrap\"\n            [class.fd-table__cell--truncate-txt]=\"column.applyText\"\n            [attr.title]=\"\n                tableTextContainer.offsetWidth < tableTextContainer.scrollWidth ? tableTextContainer.textContent : null\n            \"\n            #tableTextContainer\n        >\n            @if (_isTreeRowFirstCell($index, row)) {\n                <span\n                    class=\"fd-table__expand\"\n                    [class.fd-table__expand--open]=\"row.expanded$ | async\"\n                    aria-hidden=\"true\"\n                ></span>\n            }\n            @if (row.state === 'readonly') {\n                @if (_announceEmptyCell()) {\n                    <span\n                        [ngStyle]=\"{\n                            position: 'absolute',\n                            height: '1px',\n                            width: '1px',\n                            overflow: 'hidden',\n                            clip: 'rect(1px, 1px, 1px, 1px)',\n                            color: 'transparent',\n                            display: 'block'\n                        }\"\n                    >\n                        {{ ('platformTable.emptyCell' | fdTranslate)() }}\n                    </span>\n                }\n                @if (column?.columnCellTemplate) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"column.columnCellTemplate!\"\n                        [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n                    ></ng-template>\n                } @else {\n                    {{ row.value | valueByPath: column.key }}\n                }\n            } @else {\n                @if (column?.editableColumnCellTemplate) {\n                    <ng-template\n                        [ngTemplateOutlet]=\"column.editableColumnCellTemplate!\"\n                        [ngTemplateOutletContext]=\"{ $implicit: row.value, popping: false, rowIndex: row.index }\"\n                    ></ng-template>\n                } @else {\n                    <fdp-table-editable-cell\n                        [row]=\"row\"\n                        [column]=\"column\"\n                        [columnValue]=\"row.value | valueByPath: column.key\"\n                    ></fdp-table-editable-cell>\n                }\n            }\n        </div>\n    </td>\n}\n<ng-content></ng-content>\n@if (_fdpTableService._isShownNavigationColumn$()) {\n    <td fd-table-cell class=\"fdp-table__cell--navigation is-last-child\" fdkDisabled [addDisabledClass]=\"false\">\n        @if (row.navigatable) {\n            <fd-icon\n                fd-table-icon\n                [navigation]=\"true\"\n                [glyph]=\"navigationIcon()\"\n                class=\"fdp-table__navigation-indicator\"\n                [attr.title]=\"('platformTable.rowNavigateButtonTitle' | fdTranslate)()\"\n            ></fd-icon>\n        }\n    </td>\n}\n<td\n    aria-hidden=\"true\"\n    class=\"fd-table__cell fd-table__cell--mock\"\n    [class.fd-table__cell--mock-borderless]=\"!_tableColumnResizeService.cellMockVisible$()\"\n    fdkDisabled\n    [addDisabledClass]=\"false\"\n></td>\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { SPACE } from '@angular/cdk/keycodes';\nimport {\n    AfterViewChecked,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    computed,\n    ContentChild,\n    ContentChildren,\n    effect,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    inject,\n    Injector,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    signal,\n    SimpleChanges,\n    TrackByFunction,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n    DndListDirective,\n    DragAndDropModule,\n    FDK_FOCUSABLE_GRID_DIRECTIVE,\n    FocusableCellPosition,\n    FocusableGridDirective,\n    IntersectionSpyDirective,\n    KeyUtil,\n    Nullable,\n    range,\n    RangeSelector,\n    resizeObservable,\n    RtlService,\n    TabbableElementService,\n    uniq\n} from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport {\n    ContentDensityMode,\n    ContentDensityObserver,\n    contentDensityObserverProviders\n} from '@fundamental-ngx/core/content-density';\nimport { SkeletonComponent } from '@fundamental-ngx/core/skeleton';\nimport {\n    TableComponent as CoreTableComponent,\n    TableService as CoreTableService,\n    TableComponent as FdTableComponent,\n    TableBodyDirective,\n    TableCellDirective,\n    TableFooterDirective,\n    TableHeaderDirective,\n    TableRowDirective\n} from '@fundamental-ngx/core/table';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchInput } from '@fundamental-ngx/platform/search-field';\nimport { FDP_PRESET_MANAGED_COMPONENT, isJsObject } from '@fundamental-ngx/platform/shared';\nimport {\n    applySelectionToChildren,\n    buildNewRowSkeleton,\n    CollectionFilter,\n    CollectionGroup,\n    CollectionSort,\n    convertObjectsToTableRows,\n    convertTreeObjectsToTableRows,\n    convertTreeTableRowToFlatList,\n    DEFAULT_HIGHLIGHTING_KEY,\n    EDITABLE_ROW_SEMANTIC_STATE,\n    EditableTableCell,\n    FDP_TABLE_DRAGGABLE_DIRECTIVE,\n    FDP_TABLE_STATE_DIRECTIVE,\n    FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n    findRowChildren,\n    getFreezableColumns,\n    getFreezableEndColumns,\n    getRowParents,\n    getSelectableRows,\n    isRowNavigatable,\n    isTableRow,\n    isTreeRowFirstCell,\n    PlatformTableManagedPreset,\n    ROW_HEIGHT,\n    RowClassesPipe,\n    RowComparator,\n    SaveRowsEvent,\n    SELECTION_COLUMN_WIDTH,\n    SelectionMode,\n    SelectionModeValue,\n    SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH,\n    Table,\n    TABLE_COLUMN_MIN_WIDTH,\n    TableCellActivateEvent,\n    TableColumn,\n    TableColumnFreezeEvent,\n    TableColumnResizeService,\n    TableColumnsChangeEvent,\n    TableDataSource,\n    TableDataSourceDirective,\n    TableDraggable,\n    TableFilterChangeEvent,\n    TableGroupChangeEvent,\n    TableHeaderResizerDirective,\n    TableInitialState,\n    TablePageChangeEvent,\n    TableResponsiveService,\n    TableRow,\n    TableRowActivateEvent,\n    TableRowClass,\n    TableRowSelectionChangeEvent,\n    TableRowService,\n    TableRowToggleOpenStateEvent,\n    TableRowType,\n    TableScrollable,\n    TableScrollableDirective,\n    TableScrollDispatcherService,\n    TableService,\n    TableSortChangeEvent,\n    TableState,\n    TableVirtualScroll\n} from '@fundamental-ngx/platform/table-helpers';\nimport { shallowEqual } from 'fast-equals';\nimport { fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\nimport {\n    debounceTime,\n    distinctUntilChanged,\n    filter,\n    map,\n    startWith,\n    switchMap,\n    take,\n    takeUntil,\n    tap\n} from 'rxjs/operators';\nimport {\n    NoDataWrapperComponent,\n    PlatformTableColumnResizerComponent,\n    TABLE_TOOLBAR,\n    TableAppliedFilter,\n    TableToolbarInterface,\n    ToolbarContext\n} from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport { TableHeaderRowComponent } from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nlet tableUniqueId = 0;\n\n/**\n * The component that represents a table.\n * A table is a set of tabular data. Line items can support data, images and actions.\n * ```html\n * <fdp-table\n *  [dataSource]=\"source\"\n *  fdCompact\n *  selectionMode=\"multiple\"\n *  emptyTableMessage=\"No data found\">\n *\n *  <fdp-table-toolbar\n *   title=\"Order Line Items\"\n *   [hideItemCount]=\"false\">\n *  </fdp-table-toolbar>\n *\n *  <fdp-column\n *   name=\"name\"\n *   key=\"name\"\n *   label=\"Name\"\n *   align=\"start\">\n *  </fdp-column>\n *\n *  <fdp-column\n *   name=\"description\"\n *   key=\"description\"\n *   label=\"Description\">\n *  </fdp-column>\n * </fdp-table>\n * ```\n */\n@Component({\n    selector: 'fdp-table',\n    templateUrl: './table.component.html',\n    styleUrl: './table.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        { provide: Table, useExisting: forwardRef(() => TableComponent) },\n        TableRowService,\n        TableService,\n        CoreTableService,\n        TableScrollDispatcherService,\n        TableColumnResizeService,\n        TableResponsiveService,\n        contentDensityObserverProviders({\n            supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY, ContentDensityMode.CONDENSED]\n        }),\n        {\n            provide: FDP_PRESET_MANAGED_COMPONENT,\n            useExisting: TableComponent\n        }\n    ],\n    hostDirectives: [\n        {\n            directive: TableDataSourceDirective,\n            inputs: ['dataSource', 'childDataSource'],\n\n            outputs: [\n                'childDataSourceChanged',\n                // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n                'onDataRequested',\n                // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n                'onDataReceived',\n                'dataSourceChanged',\n                'dataChanged',\n                'isLoading'\n            ]\n        },\n        TableHeaderResizerDirective\n    ],\n    host: {\n        class: 'fdp-table',\n        '[class.fdp-table--outer-scroll]': 'outerScroll',\n        '[class.fd-table--no-horizontal-borders]': 'noHorizontalBorders || noBorders',\n        '[class.fd-table--no-vertical-borders]': 'noVerticalBorders',\n        '[class.fd-table--group]': '_isGroupTable$()'\n    },\n    imports: [\n        NgTemplateOutlet,\n        BusyIndicatorComponent,\n        PlatformTableColumnResizerComponent,\n        TableScrollableDirective,\n        FocusableGridDirective,\n        CoreTableComponent,\n        TableHeaderDirective,\n        TableHeaderRowComponent,\n        TableBodyDirective,\n        DragAndDropModule,\n        TableGroupRowComponent,\n        TableRowComponent,\n        TablePoppingRowComponent,\n        TableRowDirective,\n        TableCellDirective,\n        SkeletonComponent,\n        IntersectionSpyDirective,\n        AsyncPipe,\n        FdTranslatePipe,\n        RowClassesPipe,\n        TableGrowingButtonComponent,\n        TableFooterDirective,\n        TableFooterRowComponent\n    ]\n})\nexport class TableComponent<T = any>\n    extends Table<T>\n    implements AfterViewInit, OnDestroy, OnChanges, OnInit, AfterViewChecked\n{\n    /** Component name used in a Preset-managed component. */\n    @Input()\n    name = 'platformTable';\n\n    /** ID for the Table. */\n    @Input()\n    @HostBinding('attr.id')\n    id = `fdp-table-${tableUniqueId++}`;\n\n    /** Whether to allow resizing columns by dragging the column edge with mouse. */\n    @Input()\n    enableDragResize = true;\n\n    /**\n     * Whether to fix the table header and footer. Default is true.\n     * Note that if the table contains freezable columns, the header and\n     * footer will be fixed automatically, regardless of this input value.\n     * */\n    @Input()\n    fixed = true;\n\n    /** The column `name` to freeze columns up to and including. */\n    @Input()\n    freezeColumnsTo: string;\n\n    /** The column `name` to freeze columns after and including. */\n    @Input()\n    freezeEndColumnsTo: string;\n    /** Toggle for page scrolling feature. */\n    @Input()\n    pageScrolling = false;\n    /** Whether the table should render growing button at the bottom. */\n    @Input()\n    showGrowingButton = false;\n    /**\n     * Whether to show total items amount in growing button text content.\n     */\n    @Input()\n    showItemsCount = false;\n    /** Number of items per page. */\n    @Input()\n    pageSize: Nullable<number>;\n    /** Page scrolling threshold in px. */\n    @Input()\n    pageScrollingThreshold = 80;\n    /** Table body height. */\n    @Input()\n    bodyHeight: string;\n    /** Text displayed when table has no items. */\n    @Input()\n    emptyTableMessage: string;\n    /** Text displayed when table has no visible columns. */\n    @Input()\n    noVisibleColumnsMessage: string;\n    /** Table without horizontal borders. */\n    @Input()\n    noHorizontalBorders = false;\n    /** If the table scrolling should happen outside and stick the toolbar and thead */\n    @Input({ transform: booleanAttribute })\n    outerScroll = false;\n    /** Table without vertical borders. */\n    @Input()\n    set noVerticalBorders(value: boolean) {\n        this._noVerticalBorders = value;\n    }\n\n    get noVerticalBorders(): boolean {\n        return this._noVerticalBorders || this.noBorders || this._tableService.poppingColumns$().length > 0;\n    }\n\n    /** @hidden */\n    private _noVerticalBorders = false;\n\n    /** Table without borders. */\n    @Input()\n    noBorders = false;\n    /** Table body without any borders, but header with borders. */\n    @Input()\n    noBodyBorders = false;\n    /** Table without outer borders */\n    @HostBinding('class.fdp-table--no-outer-border')\n    @Input()\n    noOuterBorders = false;\n    /** Table body without horizontal borders. */\n    @Input()\n    noBorderX = false;\n    /** Table body without vertical borders. */\n    @Input()\n    noBorderY = false;\n    /** Accessor to a children nodes of tree. */\n    @Input()\n    relationKey: string;\n    /** Table row expanded state key. Used to set the initial state of tree row. */\n    @Input()\n    expandedStateKey: string;\n    /** Property key indicating that the row has children accessible via [childDataSource]. */\n    @Input()\n    hasChildrenKey: string;\n    /**\n     * Whether row is navigatable.\n     * Pass boolean value to set state for the all rows.\n     * Pass string value with the key of the row item's field to compute state for every single row.\n     */\n    @Input()\n    rowNavigatable: string | boolean = false;\n    /**\n     * Whether to highlight navigated row.\n     */\n    @Input()\n    highlightNavigatedRow = false;\n    /** Whether table row can be clicked */\n    @Input()\n    rowsActivable = false;\n    /** Value with the key of the row item's field to enable selecting.  */\n    @Input()\n    selectedKey: string;\n    /** Value with the key of the row item's field to enable selecting.  */\n    @Input()\n    selectableKey: string;\n    /**\n     * Tracking function that will be used to check the differences in data changes.\n     * Used similarly to `ngFor` `trackBy` function.\n     * Accepts a function that takes two parameters, index and item.\n     */\n    @Input()\n    trackBy: TrackByFunction<T>;\n    /**\n     * An optional function that identifies uniqueness of a particular row.\n     * Table component uses it to be able to preserve selection when a data list is changed.\n     */\n    @Input()\n    rowComparator: RowComparator<T>;\n    /** String or function to calculate additional rows' CSS classes. */\n    @Input()\n    rowsClass: TableRowClass<T>;\n    /** Used to construct empty row object for editing. */\n    @Input()\n    editableRowSkeleton: T;\n    /** Whether all rows should be collapsed by default after the table is loaded. */\n    @Input()\n    expandOnInit = false;\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     * 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    /** Event emitted when the current preset configuration has been changed. */\n    /**\n     * Whether to load previous pages.\n     * This option works only when `pageScrolling` is true, and the initial page > 1\n     */\n    @Input()\n    loadPagesBefore = false;\n\n    /**\n     * Whether or not the header cells should be interactive\n     * (have hover and active states)\n     * default: false\n     */\n    @Input()\n    nonInteractiveHeader = false;\n\n    /** @hidden */\n    _selectionMode: SelectionModeValue = SelectionMode.NONE;\n\n    /** @hidden */\n    @ViewChild(TableHeaderRowComponent)\n    _header: TableHeaderRowComponent;\n\n    /** Sets selection mode for the table. 'single' | 'multiple' | 'none' */\n    @Input()\n    set selectionMode(value: SelectionModeValue) {\n        this._selectionMode = value;\n        this._isSelectionColumnShown = this.selectionMode !== SelectionMode.NONE;\n        this._setSelectionColumnWidth();\n    }\n\n    get selectionMode(): SelectionModeValue {\n        return this._selectionMode;\n    }\n\n    /** @hidden */\n    private _enableTristateMode = false;\n\n    /**\n     *  When True, the checked state of each tree item depends on the checked\n     *  state of its parent or direct child.\n     */\n    @Input()\n    set enableTristateMode(value: boolean) {\n        this._enableTristateMode = value;\n    }\n\n    get enableTristateMode(): boolean {\n        return this.isTreeTable && this._enableTristateMode;\n    }\n\n    /** Value with the key of the row item's field to compute semantic state of the row.  */\n    @Input()\n    set semanticHighlighting(value: string) {\n        this._semanticHighlightingKey = value;\n        this._setSemanticHighlighting();\n    }\n\n    get semanticHighlighting(): string {\n        if (!this._semanticHighlightingKey && this._forceSemanticHighlighting) {\n            return DEFAULT_HIGHLIGHTING_KEY;\n        }\n\n        return this._semanticHighlightingKey;\n    }\n\n    /**\n     * Whether to force rows to follow 'checked all' state of the table.\n     * If true, all new rows that are coming from the dataSource will follow 'checked all' state.\n     * If false, row will respect `checkedKey` property to define checked state of itself.\n     * Default is false.\n     */\n    @Input()\n    forceCheckedAllState = false;\n\n    /**\n     * aria-labelledby attribute value for the table.\n     */\n    @Input()\n    ariaLabelledBy: string;\n\n    /** The minimum width at which the user can resize a column, in pixels. Default is 50. */\n    @Input()\n    minimumColumnWidth = TABLE_COLUMN_MIN_WIDTH;\n\n    /** Whether to display the table footer. */\n    @Input({ transform: booleanAttribute })\n    showTableFooter = false;\n\n    /**\n     * Specifies minimal width of the non-frozen columns.\n     * Useful when table has large amount of freezable columns and table still should have some free space available.\n     */\n    @Input()\n    set nonFrozenColumnsMinWidth(value: number) {\n        this._listenToFixedColumnsWidth();\n        this._nonFrozenColumnsMinWidth = value;\n    }\n\n    get nonFrozenColumnsMinWidth(): number {\n        return this._nonFrozenColumnsMinWidth;\n    }\n\n    /** @hidden */\n    private _nonFrozenColumnsMinWidth = 0;\n\n    /** @hidden */\n    private _shouldCheckNewRows = false;\n\n    /** @hidden */\n    private _calculateFrozenColumnRefresh$ = new Subject<void>();\n\n    /** @hidden */\n    private _defaultBodyHeight = '100%';\n\n    /** Event emitted when current preset configuration has been changed. */\n    @Output()\n    presetChanged = new EventEmitter<PlatformTableManagedPreset>();\n    /** Event fired when table selection has changed. */\n    @Output()\n    readonly rowSelectionChange: EventEmitter<TableRowSelectionChangeEvent<T>> = new EventEmitter<\n        TableRowSelectionChangeEvent<T>\n    >();\n    /** Event fired when table sort order has changed. */\n    @Output()\n    readonly sortChange: EventEmitter<TableSortChangeEvent> = new EventEmitter<TableSortChangeEvent>();\n    /** Event fired when the table filter has changed. */\n    @Output()\n    readonly filterChange: EventEmitter<TableFilterChangeEvent> = new EventEmitter<TableFilterChangeEvent>();\n    /** Event fired when table grouping has changed. */\n    @Output()\n    readonly groupChange: EventEmitter<TableGroupChangeEvent> = new EventEmitter<TableGroupChangeEvent>();\n    /** Event fired when visible columns list has been changed. */\n    @Output()\n    readonly columnsChange: EventEmitter<TableColumnsChangeEvent> = new EventEmitter<TableColumnsChangeEvent>();\n    /** Event emitted when pagination state has been changed. */\n    @Output()\n    readonly pageChange = new EventEmitter<TablePageChangeEvent>();\n    /** Event fired when there is a change in the frozen column. */\n    @Output()\n    readonly columnFreeze: EventEmitter<TableColumnFreezeEvent> = new EventEmitter<TableColumnFreezeEvent>();\n    /** Event fired when group/tree row collapsed/expanded. */\n    @Output()\n    readonly rowToggleOpenState = new EventEmitter<TableRowToggleOpenStateEvent<T>>();\n    /** Event fired when a cell is clicked or focused. */\n    @Output()\n    readonly cellActivate = new EventEmitter<TableCellActivateEvent<T>>();\n    /** Event fired when row navigated. */\n    @Output()\n    readonly rowActivate = new EventEmitter<TableRowActivateEvent<T>>();\n    /** Event fired when row navigated. */\n    @Output()\n    readonly rowNavigate = new EventEmitter<TableRowActivateEvent<T>>();\n    /** Event fired when empty row added. */\n    @Output()\n    readonly emptyRowAdded = new EventEmitter<void>();\n    /** Event fired when save button pressed. */\n    @Output()\n    readonly save = new EventEmitter<SaveRowsEvent<T>>();\n    /** Event fired when cancel button pressed. */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    readonly cancel = new EventEmitter<void>();\n    /** Event emitted when table body being scrolled. */\n    @Output()\n    readonly tableScrolled = new EventEmitter<number>();\n    /** Event emitted when new rows has been set and rendered. */\n    @Output()\n    readonly tableRowsSet = new EventEmitter<void>();\n    /** Event emitted when all rows being expanded. */\n    @Output()\n    allRowsExpanded = new EventEmitter<void>();\n    /** Event emitted when all rows being collapsed. */\n    @Output()\n    allRowsCollapsed = new EventEmitter<void>();\n    /** Event emitted when a cell is focused. */\n    @Output()\n    readonly cellFocused = new EventEmitter<any>();\n    /** @hidden */\n    @ViewChild('tableScrollable')\n    readonly tableScrollable: TableScrollable;\n    /** @hidden */\n    @ViewChild('tableContainer')\n    readonly tableContainer: ElementRef<HTMLDivElement>;\n    /** @hidden */\n    @ViewChild(FdTableComponent, { read: ElementRef })\n    readonly table: ElementRef<HTMLDivElement>;\n    /** @hidden */\n    @ViewChild(FDK_FOCUSABLE_GRID_DIRECTIVE)\n    readonly _focusableGrid: FocusableGridDirective;\n    /** @hidden */\n    @ViewChild('tableBody', { read: ElementRef })\n    private readonly _tableBody: ElementRef<HTMLElement>;\n    /** @hidden */\n    @ViewChild(DndListDirective)\n    private readonly _dndDirective: Nullable<DndListDirective<TableRow>>;\n    /** @hidden */\n    @ViewChild('tableScrollMockContainer')\n    readonly tableScrollMockContainer: ElementRef<HTMLDivElement>;\n    /** @hidden */\n    @ViewChild('tableBody', { read: ElementRef })\n    readonly tableBody: ElementRef<HTMLElement>;\n    /** @hidden */\n    @ContentChildren(TableColumn)\n    readonly columns: QueryList<TableColumn>;\n    /** @hidden */\n    @ContentChildren(EditableTableCell, { descendants: true })\n    readonly customEditableCells: QueryList<EditableTableCell>;\n    /** @hidden */\n    @ContentChild(TABLE_TOOLBAR)\n    readonly tableToolbar: TableToolbarInterface;\n    /** @hidden */\n    @ContentChild(NoDataWrapperComponent)\n    readonly _noDataWrapper: Nullable<NoDataWrapperComponent>;\n\n    /** Total loaded items. */\n    loadedRows$ = signal(0);\n\n    /** @hidden */\n    hoveredRowIndex$ = signal<Nullable<number>>(null);\n\n    /** @hidden */\n    get initialSortBy(): CollectionSort[] {\n        return this.initialState?.initialSortBy ?? [];\n    }\n\n    /**\n     * @hidden\n     * verify if the bodyheight provided is valid in percentage or pixels\n     */\n    get isBodyHeightValid(): boolean {\n        const height = this.bodyHeight;\n\n        if (height) {\n            return (\n                (height.endsWith('px') && this._isValidInteger(height.split('px')[0])) ||\n                (height.endsWith('%') && this._isValidInteger(height.split('%')[0]))\n            );\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @hidden\n     * if the bodyHeight is valid, then set that as value as body height for table\n     * else set default body height for table as 100%\n     */\n    get tableBodyHeight(): string {\n        return this.isBodyHeightValid ? this.bodyHeight : this._defaultBodyHeight;\n    }\n\n    /**\n     * @hidden\n     * Columns to be rendered in the template\n     */\n    get _visibleColumns(): TableColumn[] {\n        return this._tableService.visibleColumns$();\n    }\n\n    /** @hidden */\n    get isTreeTable(): boolean {\n        return !!this._dndTableDirective?.isTreeTable;\n    }\n\n    /** @hidden */\n    get enableRowReordering(): boolean {\n        return !!this._dndTableDirective?.enableRowReordering;\n    }\n\n    /** Whether the table rows are draggable. */\n    get isDraggable(): boolean {\n        return !!this._dndTableDirective?.isTreeTable && !!this._dndTableDirective?.enableRowReordering;\n    }\n\n    /** @hidden */\n    get _semanticHighlightingColumnWidth(): number {\n        return this.semanticHighlighting ? SEMANTIC_HIGHLIGHTING_COLUMN_WIDTH : 0;\n    }\n\n    /** @hidden Sum of widths of fixed columns (semantic highlighting, selection) */\n    get _fixedColumnsPadding(): number {\n        return this._semanticHighlightingColumnWidth + this._selectionColumnWidth;\n    }\n\n    /** @hidden */\n    get _tableWidthPx(): number {\n        return this.tableContainer.nativeElement.getBoundingClientRect().width;\n    }\n\n    /** @hidden */\n    get loadingState(): boolean {\n        return (\n            this.loading ??\n            (this._dataSourceDirective._internalLoadingState ||\n                this._dataSourceDirective._internalChildrenLoadingState ||\n                this._dndLoadingState)\n        );\n    }\n\n    /**\n     *  Whether the selection column should be shown,\n     *  If there are no visible rows or visible columns\n     *  or selection mode is none, then selection column should not be shown.\n     **/\n    get isSelectionColumnShown(): boolean {\n        return (\n            this._isSelectionColumnShown &&\n            !!this._tableRowsVisible.length &&\n            this._tableService.visibleColumnsLength() > 0\n        );\n    }\n\n    /** @hidden */\n    get _ariaLabelledBy(): string | null {\n        if (this.ariaLabelledBy) {\n            return this.ariaLabelledBy;\n        }\n        return this.tableToolbar?.tableToolbarTitleId || null;\n    }\n\n    /**\n     * @hidden\n     * Representation of combined table rows.\n     * Contains all rows including group rows.\n     */\n    _tableRows: TableRow<T>[] = [];\n    /**\n     * @hidden\n     * Representation of table rows that came from dataSource.\n     * Contains all rows including group rows.\n     */\n    _dataSourceTableRows: TableRow<T>[] = [];\n    /**\n     * @hidden\n     * Representation of added table rows.\n     */\n    _newTableRows: TableRow<T>[] = [];\n    /**\n     * @hidden\n     * Visible table rows.\n     * Rows list that is used to be rendered in the ui.\n     * Based on _tableRows and excludes hidden rows.\n     */\n    _tableRowsVisible: TableRow<T>[] = [];\n    /**\n     * @hidden\n     * Table Column Map. Where key is column key and value is column\n     */\n    _keyToColumnMap: Map<string, TableColumn> = new Map();\n    /**\n     * @hidden\n     * Freezable column names and their respective indexes\n     */\n    _freezableColumns: Map<string, number> = new Map();\n    /**\n     * @hidden\n     * Freezable column names and their respective indexes for columns that will be frozen to the end of the table\n     */\n    _freezableEndColumns: Map<string, number> = new Map();\n    /** @hidden */\n    _tableColumnsLength = 0;\n    /** @hidden */\n    readonly loadingRowRange = range(3);\n    /** @hidden */\n    get loadingColumnsRange(): number[] {\n        return range(this._tableColumnsLength);\n    }\n    /** @hidden */\n    _checkedState: boolean | null = false;\n    /** @hidden */\n    _isGroupTable$ = computed(() => {\n        const groupRules = this._tableService.groupRules$();\n\n        return groupRules ? groupRules.size > 0 : (this.initialState?.initialGroupBy?.length ?? 0) > 0;\n    });\n    /**\n     * @hidden\n     * Used to create a row component placeholder and set data in it rather than re-create the row component when data changes.\n     * Optimizes performance due to skipping initial setup of the component.\n     */\n    _tableCurrentlyRenderedRowsPlaceholder: number[] = [];\n    /** @hidden */\n    _dndTableRowsPlaceholder: TableRow[] = [];\n    /** @hidden */\n    _isSelectionColumnShown = false;\n    /** @hidden */\n    readonly _toolbarContext: ToolbarContext;\n    /** @hidden */\n    _navigatedRowIndex: number;\n    /** @hidden */\n    _selectionColumnWidth = 0;\n    /** @hidden */\n    readonly tableColumnsStream: Observable<TableColumn[]>;\n    /** @hidden */\n    _loadPreviousPages = false;\n    /** @hidden */\n    readonly _dataSourceDirective = inject<TableDataSourceDirective<T>>(TableDataSourceDirective);\n    /** @hidden */\n    readonly _tableRowService = inject(TableRowService);\n    /** @hidden */\n    readonly initialState = inject<TableInitialState>(FDP_TABLE_STATE_DIRECTIVE, {\n        optional: true\n    });\n    /** @hidden */\n    readonly _virtualScrollDirective: TableVirtualScroll | null = inject<TableVirtualScroll>(\n        FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE,\n        {\n            optional: true\n        }\n    );\n    /** @hidden */\n    readonly _dndTableDirective = inject<TableDraggable>(FDP_TABLE_DRAGGABLE_DIRECTIVE, {\n        optional: true\n    });\n    /** Loading state */\n    @Input()\n    loading: boolean | undefined;\n    /** @hidden */\n    private _semanticHighlightingKey: string;\n    /** @hidden */\n    private _forceSemanticHighlighting = false;\n    /** @hidden */\n    private readonly _isShownSortSettingsInToolbar$ = signal(false);\n    /** @hidden */\n    private readonly _isShownFilterSettingsInToolbar$ = signal(false);\n    /** @hidden */\n    private readonly _isShownGroupSettingsInToolbar$ = signal(false);\n    /** @hidden */\n    private _appliedFilterNames = signal<TableAppliedFilter[]>([]);\n    /** @hidden */\n    private readonly _isShownColumnSettingsInToolbar$ = signal(false);\n    /** @hidden */\n    private readonly _isShownSettingsInToolbar$ = signal(false);\n\n    /**\n     * @hidden\n     * Indicates when all items are checked\n     */\n    private _checkedAll = false;\n    /**\n     * @hidden\n     * Indicates whether at least 1 item is checked\n     */\n    private _checkedAny = false;\n    /** @hidden */\n    private _subscriptions = new Subscription();\n    /** @hidden */\n    private _viewInitiated = false;\n    /** @hidden */\n    private _addedItems: T[] = [];\n    /** @hidden */\n    private _columnsWidthSet = false;\n    /** @hidden */\n    private _dndLoadingState = false;\n    /** @hidden */\n    private readonly _rangeSelector = new RangeSelector();\n    /** @hidden */\n    private _currentPreset: PlatformTableManagedPreset = {};\n    /** @hidden */\n    private _initialStateSet = false;\n    /** @hidden */\n    private _rowHeightManuallySet = false;\n    /** @hidden */\n    private _shouldEmitRowsChange = false;\n    /** @hidden */\n    private _lastFreezableColumnCalculation = false;\n    /** @hidden */\n    private readonly _tableHeaderResizer = inject(TableHeaderResizerDirective);\n\n    /**\n     * @hidden\n     * Mapping function for the trackBy, provided by the user.\n     * Is needed, because we are wrapping user supplied data into a `TableRow` class.\n     */\n    _rowTrackBy: TrackByFunction<number>;\n\n    /** @hidden */\n    private readonly _defaultTrackBy: TrackByFunction<number> = (index: number) => index;\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    constructor(\n        private readonly _ngZone: NgZone,\n        private readonly _cdr: ChangeDetectorRef,\n        readonly _tableService: TableService,\n        private readonly _tableScrollDispatcher: TableScrollDispatcherService,\n        public readonly _tableColumnResizeService: TableColumnResizeService,\n        readonly contentDensityObserver: ContentDensityObserver,\n        readonly injector: Injector,\n        private readonly _tabbableService: TabbableElementService\n    ) {\n        super();\n        this.initialState?.setTable(this);\n        this._dndTableDirective?.setTable(this);\n        this._virtualScrollDirective?.setTable(this);\n        this._dataSourceDirective.setTable(this);\n        this._rowTrackBy = this._defaultTrackBy;\n        this._toolbarContext = {\n            counter: this._dataSourceDirective.totalItems$,\n            sortable: this._isShownSortSettingsInToolbar$,\n            filterable: this._isShownFilterSettingsInToolbar$,\n            groupable: this._isShownGroupSettingsInToolbar$,\n            columns: this._isShownColumnSettingsInToolbar$,\n            settings: this._isShownSettingsInToolbar$,\n            hasAnyActions: computed(\n                () =>\n                    this._isShownSortSettingsInToolbar$() ||\n                    this._isShownFilterSettingsInToolbar$() ||\n                    this._isShownGroupSettingsInToolbar$() ||\n                    this._isShownColumnSettingsInToolbar$() ||\n                    this._isShownSettingsInToolbar$()\n            ),\n            appliedFilters: this._appliedFilterNames\n        };\n\n        effect(() => {\n            this._setMockScrollbarPosition(this._rtlService?.rtl());\n        });\n\n        this.tableColumnsStream = this._tableService.tableColumns$.asObservable();\n\n        this._subscriptions.add(\n            this._tableRowService.cellFocused$.subscribe((event) => {\n                this.cellFocused.emit(event);\n            })\n        );\n        this._subscriptions.add(\n            this._tableRowService.cellActivate$.subscribe((event) => {\n                this.cellActivate.emit(event);\n            })\n        );\n    }\n\n    /** Returns array of rows that are currently rendered in the table body. */\n    getCurrentlyRenderedRows(): number[] {\n        return this._tableCurrentlyRenderedRowsPlaceholder;\n    }\n\n    /**\n     * Sets an array of rows that are currently rendered in the table body.\n     * @param startIndex Start index of all rows.\n     * @param length Length of rows.\n     */\n    setCurrentlyRenderedRows(startIndex = 0, length: number): void {\n        const newIndices = new Array(length).fill(null).map((_, i) => i + startIndex);\n        const newSlice = this._tableRows.slice(startIndex, startIndex + length);\n\n        // During drag with virtual scroll, preserve the dragged row at its original DnD index\n        if (\n            this._virtualScrollDirective?.virtualScroll &&\n            this._virtualScrollDirective?.scrollWholeRows &&\n            this._dndTableDirective?.dragDropInProgress &&\n            this._dndTableDirective?.draggedRow &&\n            this._dndTableDirective?.draggedRowGlobalIndex !== null &&\n            this._dndTableDirective?.draggedDndIndex !== null\n        ) {\n            const draggedRow = this._dndTableDirective.draggedRow;\n            const draggedGlobalIndex = this._dndTableDirective.draggedRowGlobalIndex;\n            const targetDndIndex = this._dndTableDirective.draggedDndIndex;\n\n            // Find where the dragged row is in the new slice\n            const indexInNewSlice = newSlice.indexOf(draggedRow);\n            const draggedGlobalIndexInNewIndices = newIndices.indexOf(draggedGlobalIndex);\n\n            if (indexInNewSlice >= 0 && draggedGlobalIndexInNewIndices >= 0) {\n                // Dragged row is in the new range - move it to target DnD index\n                if (indexInNewSlice !== targetDndIndex && targetDndIndex < newSlice.length) {\n                    newSlice.splice(indexInNewSlice, 1);\n                    newSlice.splice(targetDndIndex, 0, draggedRow);\n\n                    newIndices.splice(draggedGlobalIndexInNewIndices, 1);\n                    newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n                }\n            } else if (draggedGlobalIndexInNewIndices < 0) {\n                // Dragged row is NOT in the new range, but we need to keep it visible\n                if (targetDndIndex < newSlice.length) {\n                    newSlice.splice(targetDndIndex, 0, draggedRow);\n                    newSlice.pop();\n\n                    newIndices.splice(targetDndIndex, 0, draggedGlobalIndex);\n                    newIndices.pop();\n                } else {\n                    newSlice.push(draggedRow);\n                    newIndices.push(draggedGlobalIndex);\n                }\n            }\n\n            this._dndTableRowsPlaceholder = newSlice;\n            this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n        } else {\n            this._dndTableRowsPlaceholder = newSlice;\n            this._tableCurrentlyRenderedRowsPlaceholder = newIndices;\n        }\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('loading' in changes) {\n            this._tableService.setTableLoading(this.loadingState);\n        }\n\n        if ('trackBy' in changes) {\n            this._rowTrackBy =\n                typeof this.trackBy === 'function'\n                    ? (index) => this.trackBy(index, this._tableRowsVisible[index].value)\n                    : this._defaultTrackBy;\n        }\n\n        // changes below should be checked only after view is initialized\n        if (!this._viewInitiated) {\n            return;\n        }\n\n        if ('selectionMode' in changes) {\n            this._rangeSelector.reset();\n        }\n\n        if (\n            'selectionMode' in changes ||\n            'freezeColumnsTo' in changes ||\n            'freezeEndColumnsTo' in changes ||\n            'semanticHighlighting' in changes\n        ) {\n            this.recalculateTableColumnWidth();\n        }\n\n        if ('rowNavigatable' in changes) {\n            this._tableRows.forEach((row) => (row.navigatable = isRowNavigatable(row.value, this.rowNavigatable)));\n\n            this._calculateIsShownNavigationColumn();\n        }\n\n        if ('rowHeight' in changes) {\n            this._rowHeightManuallySet = true;\n        }\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._tableColumnResizeService.setTableRef(this);\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._viewInitiated = true;\n\n        this.initialState?.setInitialState();\n\n        this._dataSourceDirective.initializeDataSource();\n\n        this._listenToTableStateChanges();\n\n        this._listenToColumns();\n\n        this._calculateVisibleColumns();\n\n        this._tableService.constructTableMetadata();\n\n        this._listenToTableRowsPipe();\n\n        this._listenToPageScrolling();\n\n        this._virtualScrollDirective?.listenOnVirtualScroll();\n\n        this._listenToRowHeightChange();\n\n        this._listenToColumnPropertiesChange();\n\n        this._listenToTableWidthChanges();\n\n        this._listenToTableContainerMouseLeave();\n\n        this._listenToLoadingAndRefocusCell();\n\n        if (\n            !this._virtualScrollDirective?.scrollWholeRows ||\n            !this._virtualScrollDirective ||\n            !this._virtualScrollDirective?.virtualScroll\n        ) {\n            this._initScrollPosition();\n        }\n\n        this._listenToFixedColumnsWidth();\n\n        if (this.expandOnInit) {\n            this.expandAll();\n        }\n\n        if (!this._virtualScrollDirective?.scrollWholeRows) {\n            this._subscriptions.add(\n                this._virtualScrollDirective?.virtualScrollTransform$\n                    .pipe(filter(() => !!this._virtualScrollDirective?.virtualScroll && !!this._tableBody))\n                    .subscribe((transform) => {\n                        this._tableBody.nativeElement.style.transform = `translateY(${transform}px)`;\n                    })\n            );\n        }\n\n        if (this._focusableGrid) {\n            this._focusableGrid.shortRowFocus = 'first';\n        }\n\n        if (this._virtualScrollDirective?.scrollWholeRows) {\n            this._setMockScrollbarPosition(this._rtlService?.rtl());\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewChecked(): void {\n        // When table rows are set, emit an event to manipulate the view (e.g., scroll to some row).\n        if (!this._shouldEmitRowsChange) {\n            return;\n        }\n        this._shouldEmitRowsChange = false;\n        const emitter = this.tableRowsSet;\n        this._onZoneFree(() => {\n            emitter.emit();\n        });\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n        this._calculateFrozenColumnRefresh$.next();\n        this._calculateFrozenColumnRefresh$.complete();\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 | PlatformTableManagedPreset): void {\n        this._currentPreset = state;\n        const newState: TableState = Object.assign({}, this._tableService.getDefaultState(), state);\n        this._tableService.setSort(newState.sortBy);\n        this._tableService.setFilters(newState.filterBy);\n        this._tableService.setGroups(newState.groupBy);\n        this.setColumns(newState.columns);\n        this._tableService.search(newState.searchInput);\n        this._tableService.freezeTo(newState.freezeToColumn);\n        this.pageSize = newState.page.pageSize;\n        this._tableService.setCurrentPage(newState.page.currentPage);\n        this._tableService.setTableState(newState);\n        this._cdr.markForCheck();\n    }\n\n    /** Get table columns definition list. */\n    getTableColumns(): TableColumn[] {\n        return this.columns?.toArray() || [];\n    }\n\n    /** Get a list of visible table columns. */\n    getVisibleTableColumns(): TableColumn[] {\n        return this._visibleColumns || [];\n    }\n\n    /** Set Sorting rules */\n    sort(sortRules: CollectionSort[]): void {\n        this._tableService.setSort(sortRules);\n        this._cdr.markForCheck();\n    }\n\n    /** Add Sorting rules to the existing ones */\n    addSort(sortRules: CollectionSort[]): void {\n        this._tableService.addSort(sortRules);\n        this._cdr.markForCheck();\n    }\n\n    /** Set Filter rules */\n    filter(filterRules: CollectionFilter[]): void {\n        this._tableService.setFilters(filterRules);\n        this._cdr.markForCheck();\n    }\n\n    /** Add Filter rule */\n    addFilter(filterRules: CollectionFilter[]): void {\n        this._tableService.addFilters(filterRules);\n        this._cdr.markForCheck();\n    }\n\n    /** Removes filters for the provided fields */\n    removeFilter(fields: string[]): void {\n        this._tableService.removeFilters(fields);\n        this._cdr.markForCheck();\n    }\n\n    /** Set Groups */\n    group(groups: CollectionGroup[]): void {\n        this._tableService.setGroups(groups);\n        this._cdr.markForCheck();\n    }\n\n    /** Add Groups */\n    addGroup(groups: CollectionGroup[]): void {\n        this._tableService.addGroups(groups);\n        this._cdr.markForCheck();\n    }\n\n    /**\n     * Set visible table columns\n     * The order is matter\n     * @param columns table columns names\n     */\n    setColumns(columns: string[]): void {\n        const tableColumns = this.getTableColumns();\n        const columnsObject: Record<string, string[]> = {\n            columns: [],\n            keys: []\n        };\n        tableColumns\n            .filter((column) => columns.includes(column.name))\n            // We need to have same order of columns as user defined.\n            .sort((a, b) => columns.indexOf(a.name) - columns.indexOf(b.name))\n            .reduce((acc, column) => {\n                acc.columns.push(column.name);\n                acc.keys.push(column.key);\n                return acc;\n            }, columnsObject);\n        this._tableService.setColumns(columnsObject.columns, columnsObject.keys);\n        this._cdr.markForCheck();\n    }\n\n    /** Freeze table to column */\n    freezeToColumn(columnName: string, end?: boolean): void {\n        end ? (this.freezeEndColumnsTo = columnName) : (this.freezeColumnsTo = columnName);\n\n        this._tableService.freezeTo(columnName, end);\n        this.recalculateTableColumnWidth();\n    }\n\n    /** Unfreeze column */\n    unfreeze(columnName: string, end?: boolean): void {\n        const columns = end ? this._freezableEndColumns : this._freezableColumns;\n        const freezeToColumnIndex = columns.get(columnName) ?? -1;\n        const freezeToPreviousColumnName = columns[freezeToColumnIndex - 1];\n\n        end\n            ? (this.freezeEndColumnsTo = freezeToPreviousColumnName)\n            : (this.freezeColumnsTo = freezeToPreviousColumnName);\n\n        this._tableService.freezeTo(freezeToPreviousColumnName, end);\n        this.recalculateTableColumnWidth();\n    }\n\n    /** expand all rows */\n    expandAll(): void {\n        const expandableRows = this._tableRows.filter((row) => row.type === TableRowType.TREE);\n        if (this._dataSourceDirective.childDataSource) {\n            this._tableRowService.loadChildRows(expandableRows);\n        }\n        this._markAsExpanded(expandableRows);\n        this.allRowsExpanded.emit();\n    }\n\n    /** collapse all rows */\n    collapseAll(): void {\n        this._tableRows.forEach((e) => {\n            e.expanded = false;\n            if (e.parent) {\n                e.hidden = true;\n            }\n        });\n        this.onTableRowsChanged();\n        this.allRowsCollapsed.emit();\n    }\n\n    /** Search in table */\n    search(searchInput: SearchInput): void {\n        this._tableService.search(searchInput);\n        this._cdr.markForCheck();\n    }\n\n    /** Set current page number in table */\n    setCurrentPage(currentPage: number): void {\n        this._tableService.setCurrentPage(currentPage);\n        this._cdr.markForCheck();\n    }\n\n    /** Set items per page number in table  */\n    setPageSize(pageSize: number, resetPageNumber = true): void {\n        this._tableService.setItemsPerPage(pageSize, resetPageNumber);\n    }\n\n    /** Toolbar Sort Settings button visibility */\n    showSortSettingsInToolbar(showSortSettings: boolean): void {\n        this._isShownSortSettingsInToolbar$.set(showSortSettings);\n    }\n\n    /** Toolbar Filter Settings button visibility */\n    showFilterSettingsInToolbar(showFilterSettings: boolean): void {\n        this._isShownFilterSettingsInToolbar$.set(showFilterSettings);\n    }\n\n    /** Toolbar Group Settings button visibility */\n    showGroupSettingsInToolbar(showGroupSettings: boolean): void {\n        this._isShownGroupSettingsInToolbar$.set(showGroupSettings);\n    }\n\n    /** Toolbar Columns Settings button visibility */\n    showColumnSettingsInToolbar(showColumnSettings: boolean): void {\n        this._isShownColumnSettingsInToolbar$.set(showColumnSettings);\n    }\n\n    /** Toolbar Settings button visibility */\n    showSettingsInToolbar(showSettings: boolean): void {\n        this._isShownSettingsInToolbar$.set(showSettings);\n    }\n\n    /** Disable filter from column heder menu */\n    setHeaderColumnFilteringDisabled(disabled: boolean): void {\n        this._tableService._isFilteringFromHeaderDisabled$.set(disabled);\n    }\n\n    /** Set the row navigation */\n    setRowNavigation(rowIndex: number, rowNavigatable: string | boolean): void {\n        const row = this._tableRows[rowIndex];\n\n        if (!row) {\n            return;\n        }\n\n        row.navigatable = isRowNavigatable(row.value, rowNavigatable);\n\n        this._calculateIsShownNavigationColumn();\n\n        this._cdr.markForCheck();\n    }\n\n    /**\n     * Toggle row checked state.\n     * @param rowIndex Index of the row.\n     */\n    toggleSelectableRow(rowIndex: number): void {\n        const row = this._tableRows[rowIndex];\n\n        if (!row || row.value[this.selectableKey] === false) {\n            return;\n        }\n\n        if (this.selectionMode === SelectionMode.SINGLE) {\n            this._toggleSingleSelectableRow(row);\n        } else if (this.selectionMode === SelectionMode.MULTIPLE) {\n            this._toggleMultiSelectRow(row);\n        }\n    }\n\n    /**\n     * Sets the checked state of the row.\n     * @param rowIndex Index of the row.\n     * @param value Value of the checked state.\n     */\n    setRowCheckedState(rowIndex: number, value: boolean): void {\n        const row = this._tableRows[rowIndex];\n\n        if (!row) {\n            return;\n        }\n\n        if (row.checked !== value) {\n            this.toggleSelectableRow(rowIndex);\n        }\n    }\n\n    /** Remove the row navigation */\n    removeRowNavigation(rowIndex: number): void {\n        const row = this._tableRows[rowIndex];\n\n        if (!row) {\n            return;\n        }\n\n        row.navigatable = false;\n\n        this._calculateIsShownNavigationColumn();\n\n        this._cdr.markForCheck();\n    }\n\n    /** Manually triggers column's width recalculation */\n    recalculateTableColumnWidth(): void {\n        this._tableColumnResizeService._setInitialTableWidth();\n        this._tableColumnResizeService.setColumnNames(this._visibleColumns.map((column) => column.name));\n        this._setFreezableInfo();\n    }\n\n    /** Gets the max allowed width for all freezable columns */\n    getMaxAllowedFreezableColumnsWidth(): number {\n        if (!this._freezableColumns.size) {\n            return 0;\n        }\n\n        /** Themeable scrollbar has 0.75rem in dimension */\n        const scrollbarSizeInPx = 12;\n\n        return this._tableWidthPx - this._fixedColumnsPadding - scrollbarSizeInPx - 1;\n    }\n\n    /** Get table data source */\n    getDataSource(): TableDataSource<T> {\n        return this._dataSourceDirective._tableDataSource;\n    }\n\n    /**\n     * Adds empty row for editing at the beginning of the rows array.\n     */\n    addRow(): void {\n        this._forceSemanticHighlighting = true;\n        this._setSemanticHighlighting();\n\n        const newRow = buildNewRowSkeleton(this.editableRowSkeleton, this.columns.toArray());\n        newRow[this.semanticHighlighting] = EDITABLE_ROW_SEMANTIC_STATE;\n\n        this._addedItems.unshift(newRow);\n\n        const newRows = this._createTableRowsByDataSourceItems([newRow]);\n        this._newTableRows = [...newRows, ...this._newTableRows];\n\n        this._setTableRows();\n        this.emptyRowAdded.emit();\n    }\n\n    /** Cancels editing and discards newly added rows */\n    cancelEditing(): void {\n        this._resetEditState();\n        this.cancel.emit();\n    }\n\n    /**\n     * Emits save event and resets editable rows array.\n     */\n    saveRows(): void {\n        const event = new SaveRowsEvent<T>(() => {\n            this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n        }, [...this._addedItems]);\n        const editableCells: EditableTableCell[] = ([] as EditableTableCell[]).concat.apply(\n            [],\n            Array.from(this._tableRowService.editableCells.values())\n        );\n\n        const forms = [...this.customEditableCells.toArray(), ...editableCells].map((t) => t.form);\n\n        // Trigger form revalidation\n        forms.forEach((form) => form.onSubmit(null as any));\n        if (forms.some((form) => form.invalid)) {\n            return;\n        }\n\n        this._resetEditState();\n        this.save.emit(event);\n    }\n\n    /** @deprecated use 'setTableState' instead. Sets current preset for the Table. */\n    setPreset(data: PlatformTableManagedPreset): void {\n        this.setTableState(data);\n    }\n\n    /** Returns current preset configuration. */\n    getCurrentPreset(): PlatformTableManagedPreset {\n        if (!this._currentPreset) {\n            return this.getTableState();\n        }\n        // We need to return object as similar as the original preset.\n        const currentPreset = { ...this._currentPreset };\n        const presetKeys = Object.keys(currentPreset);\n        const currentState = this.getTableState();\n\n        Object.keys(currentState).forEach((stateKey) => {\n            // Skip state entry if it's not present in preset and doesn't have any value.\n            if (\n                stateKey === 'columnKeys' ||\n                ((!currentState[stateKey] ||\n                    (Array.isArray(currentState[stateKey]) && currentState[stateKey]?.length === 0)) &&\n                    !presetKeys.includes(stateKey))\n            ) {\n                return;\n            }\n\n            currentPreset[stateKey] = currentState[stateKey];\n        });\n\n        return currentPreset;\n    }\n\n    /**\n     * Manually triggers list item event listeners for drag&drop list directive.\n     */\n    refreshDndList(): void {\n        if (this._virtualScrollDirective?.virtualScroll !== true) {\n            return;\n        }\n        this._dndDirective?.refreshQueryList();\n    }\n\n    /** @hidden */\n    _onDragStarted(row: TableRow, dndIndex: number, globalIndex: number): void {\n        this._dndTableDirective?.dragDropStart(row, dndIndex, globalIndex);\n    }\n\n    /**\n     * Programmatically toggles `expand` state of the row with defined index.\n     * @param rowIndexes row indexes including nested rows.\n     *\n     * Usage example:\n     * * To toggle first level row, pass one argument:\n     * ```\n     * table.toggleGroupRows(0) // Will result in toggling first row if it's type is `TableRowType.TREE` or `TableRowType.GROUP`.\n     * ```\n     * * To toggle nested rows, pass additional arguments of indexes:\n     * ```\n     * table.toggleGroupRows(0, 1) // Will result in toggling first root row, then it's second child.\n     * ```\n     */\n    toggleGroupRows(...rowIndexes: number[]): void {\n        let tableRow: TableRow | null = null;\n        for (const rowIndex of rowIndexes) {\n            tableRow = tableRow ? tableRow.children[rowIndex] : this._tableRows[rowIndex];\n\n            if (tableRow.type === TableRowType.ITEM) {\n                break;\n            }\n\n            this._toggleGroupRow(tableRow);\n        }\n    }\n\n    /**\n     * Function used to focus a cell in the table utilizing a FocusableCellPosition interface.\n     */\n    focusCell(position: FocusableCellPosition): void {\n        const tableEl = this.table.nativeElement as HTMLTableElement;\n        tableEl.rows[position.rowIndex].cells[position.colIndex].focus();\n    }\n\n    /**\n     * Clears the array of table rows. Triggered when new data source is applied.\n     */\n    clearTableRows(): void {\n        this._tableRows = [];\n        this.loadedRows$.set(0);\n        this._tableRowsVisible = [];\n        this._tableCurrentlyRenderedRowsPlaceholder = [];\n        this._newTableRows = [];\n        this._dataSourceTableRows = [];\n        this._setTableRows([]);\n        this._tableService.setCurrentPage(1);\n    }\n\n    // Private API\n\n    /** @hidden */\n    _scrollToOverlappedCell(): void {\n        this.tableScrollable.scrollToOverlappedCell(\n            this._rtlService?.rtl() ?? false,\n            this._freezableColumns.size,\n            this._freezableEndColumns.size\n        );\n    }\n\n    /** @hidden */\n    _calculatingLoading(isLoading: boolean): void {\n        if (this._dndLoadingState === isLoading) {\n            return;\n        }\n\n        this._dndLoadingState = isLoading;\n        this._tableService.setTableLoading(this.loadingState);\n    }\n\n    /**\n     * @hidden\n     * Toggle selectable row in SelectionMode.MULTIPLE\n     */\n    _toggleMultiSelectRow(rowToToggle: TableRow, event?: Event): void {\n        if (this.selectionMode !== SelectionMode.MULTIPLE) {\n            throw new Error('Unexpected selection mode');\n        }\n        const checked = (rowToToggle.checked = !rowToToggle.checked);\n        const rows = this._tableRows;\n        const selectedIndex = this._tableRows.findIndex((row) => row === rowToToggle);\n\n        const removed: TableRow<T>[] = [];\n        const added: TableRow<T>[] = [];\n        this._rangeSelector.onRangeElementToggled(selectedIndex, event as PointerEvent | KeyboardEvent);\n\n        this._rangeSelector.applyValueToEachInRange((idx) => {\n            const row = rows[idx];\n            if (row.type === TableRowType.ITEM || row.isTree) {\n                row.checked = checked;\n                checked ? added.push(row) : removed.push(row);\n\n                this._applyTristateSelection(row, added, removed);\n            }\n        });\n\n        this._emitRowSelectionChangeEvent(added, removed);\n\n        this._calculateCheckedAll();\n    }\n\n    /**\n     * @hidden\n     * Toggle selectable row in SelectionMode.SINGLE\n     */\n    _toggleSingleSelectableRow(rowToToggle: TableRow): void {\n        if (this.selectionMode !== SelectionMode.SINGLE) {\n            throw new Error('Unexpected selection mode');\n        }\n\n        const checked = (rowToToggle.checked = !rowToToggle.checked);\n        const removed: TableRow<T>[] = [];\n        const added: TableRow<T>[] = [];\n\n        // uncheck previously checked\n        getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n            if (row === rowToToggle) {\n                return;\n            }\n\n            if (row.checked) {\n                row.checked = false;\n                removed.push(row);\n            }\n        });\n        checked ? added.push(rowToToggle) : removed.push(rowToToggle);\n\n        this._emitRowSelectionChangeEvent(added, removed);\n\n        this._calculateCheckedAll();\n    }\n\n    /**\n     * @hidden\n     * Select / Unselect all selectable rows\n     */\n    _toggleAllSelectableRows(selectAll: boolean): void {\n        const removed: TableRow<T>[] = [];\n        const added: TableRow<T>[] = [];\n\n        getSelectableRows(this._tableRows, this.selectableKey).forEach((row) => {\n            if (row.checked === selectAll) {\n                return;\n            }\n            row.checked = selectAll;\n            selectAll ? added.push(row) : removed.push(row);\n        });\n\n        this._rangeSelector.reset();\n\n        this._shouldCheckNewRows = selectAll;\n\n        this._emitRowSelectionChangeEvent(added, removed, true);\n\n        this._calculateCheckedAll();\n    }\n\n    /**\n     * @hidden\n     * Create table row selection event\n     */\n    _emitRowSelectionChangeEvent(added: TableRow[], removed: TableRow[], all: boolean = false): void {\n        const selected = getSelectableRows(this._tableRows, this.selectableKey)\n            .filter(({ checked }) => checked)\n            .map(({ value }) => value);\n\n        this.rowSelectionChange.emit({\n            source: this,\n            selection: selected,\n            added: added.map(({ value }) => value),\n            removed: removed.map(({ value }) => value),\n            index: added.concat(removed).map(({ index }) => index),\n            all\n        });\n    }\n\n    /** @hidden */\n    _onCellClick(colIdx: number, row: TableRow<T>): void {\n        if (row.state === 'readonly' && isTreeRowFirstCell(colIdx, row)) {\n            this._toggleGroupRow(row);\n        }\n    }\n\n    /** @hidden */\n    _onRowClick(row: TableRow<T> | null, event: Event): void {\n        if (row && row.state !== 'readonly') {\n            return;\n        }\n\n        if (event && event instanceof KeyboardEvent && KeyUtil.isKeyCode(event, SPACE)) {\n            const eventTarget = event.target as HTMLElement;\n            const tabbableElement = this._tabbableService.getTabbableElement(eventTarget, false, true);\n            if (tabbableElement) {\n                event.preventDefault();\n                tabbableElement.focus();\n                tabbableElement.dispatchEvent(new MouseEvent('click'));\n            }\n        }\n\n        if (row) {\n            const e = event as MouseEvent | KeyboardEvent;\n            const ctrlKey = e.ctrlKey || e.metaKey;\n            this._emitRowNavigate(row, ctrlKey);\n            this._emitRowActivate(row, ctrlKey);\n        }\n    }\n\n    /** @hidden */\n    _emitCellActivate(columnIndex: number, row: TableRow<T>): void {\n        this.cellActivate.emit(new TableCellActivateEvent<T>(columnIndex, row.value));\n    }\n\n    /** @hidden */\n    _emitRowActivate(row: TableRow<T>, ctrlKey: boolean): void {\n        if (!this.rowsActivable) {\n            return;\n        }\n\n        const rowIndex = this._tableRows.indexOf(row);\n        this.rowActivate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n    }\n\n    /**\n     * @hidden\n     * Expand/Collapse group row\n     */\n    _toggleGroupRow(groupRow: TableRow<T>): void {\n        if (this._dndTableDirective?.dragDropInProgress) {\n            return;\n        }\n\n        this.toggleExpandableTableRow(groupRow);\n\n        const groupRowIndex = this._tableRows.indexOf(groupRow);\n        this.rowToggleOpenState.emit(\n            new TableRowToggleOpenStateEvent(groupRowIndex, groupRow.value, groupRow.expanded)\n        );\n    }\n\n    /** @hidden */\n    _emitRowNavigate(row: TableRow<T>, ctrlKey: boolean): void {\n        if (!row.navigatable) {\n            return;\n        }\n        const rowIndex = this._tableRows.indexOf(row);\n\n        if (this.highlightNavigatedRow) {\n            this._navigatedRowIndex = rowIndex;\n        }\n\n        this.rowNavigate.emit(new TableRowActivateEvent<T>(rowIndex, ctrlKey, row.value));\n    }\n\n    /** Fetch data source data. */\n    fetch(): void {\n        this._dataSourceDirective._tableDataSource.fetch(this.getTableState());\n    }\n\n    /** @hidden */\n    onTableRowsChanged(): void {\n        this._reIndexTableRows();\n        this._calculateVisibleTableRows();\n        this._calculateCheckedAll();\n\n        if (this._virtualScrollDirective) {\n            this._virtualScrollDirective.calculateVirtualScrollRows();\n        }\n    }\n\n    /** @hidden */\n    toggleExpandableTableRow(rowToToggle: TableRow, forceFetch = false): void {\n        rowToToggle.forceFetch = forceFetch;\n        const expanded = (rowToToggle.expanded = !rowToToggle.expanded);\n\n        findRowChildren(rowToToggle, this._tableRows).forEach((row) => {\n            // if parent is collapsed we want to hide all nested items\n            if (!expanded) {\n                row.hidden = true;\n                row.expanded = false;\n            }\n\n            // if parent is expanded, we want to show only items which direct parents are expanded as well\n            if (expanded) {\n                row.hidden = !getRowParents(row, rowToToggle).every((parent) => parent.expanded);\n            }\n        });\n\n        this.onTableRowsChanged();\n    }\n\n    /** @hidden */\n    _onSpyIntersect(intersected: boolean): void {\n        if (!intersected) {\n            return;\n        }\n        const {\n            page: { currentPage, pageSize }\n        } = this.getTableState();\n        const totalItems = this._dataSourceDirective.totalItems$();\n        const lastPage = Math.ceil(totalItems / (pageSize || totalItems));\n        if (currentPage >= lastPage) {\n            return;\n        }\n        this._ngZone.run(() => {\n            this.setCurrentPage(currentPage + 1);\n        });\n    }\n\n    /**\n     * After rows are rendered, the IntersectionObserver on the spy row may not\n     * emit a new event if the spy was already visible before the data changed.\n     * This method waits for the DOM to settle, then checks whether the spy row\n     * is actually inside the scroll container's viewport and, if so, triggers\n     * the next page load.\n     *\n     * @hidden\n     */\n    private _recheckSpyIntersection(): void {\n        setTimeout(() => {\n            const container = this.tableContainer?.nativeElement;\n            const spy = container?.querySelector('.fd-table__intersection-spy:last-of-type') as HTMLElement | null;\n            if (!container || !spy) {\n                return;\n            }\n            const containerRect = container.getBoundingClientRect();\n            const spyRect = spy.getBoundingClientRect();\n            // The spy is visible when its top edge is within or above the container's bottom edge\n            // (accounting for the pageScrollingThreshold offset applied via style.top).\n            if (spyRect.top <= containerRect.bottom) {\n                this._onSpyIntersect(true);\n            }\n        });\n    }\n\n    /** @hidden */\n    handleMouseEnter(rowIndex: number): void {\n        this.hoveredRowIndex$.set(rowIndex);\n    }\n\n    /** @hidden */\n    handleMouseLeave(): void {\n        this.hoveredRowIndex$.set(null);\n    }\n\n    /** Manually update index after we add new items to the main array */\n    private _reIndexTableRows(): void {\n        this._tableRows.map((row, index) => (row.index = index));\n    }\n\n    /** @hidden */\n    private _isValidInteger(value: string): boolean {\n        return Number.isInteger(parseInt(value, 10));\n    }\n\n    /** @hidden */\n    private _markAsExpanded(rows: TableRow<T>[]): void {\n        rows.forEach((e) => {\n            e.expanded = true;\n            e.hidden = false;\n        });\n        this.onTableRowsChanged();\n    }\n\n    /** @hidden */\n    private _listenToTableRowsPipe(): void {\n        this._subscriptions.add(\n            this._dataSourceDirective.items$\n                .pipe(\n                    // map source items to table rows\n                    map((source: T[]) => this._createTableRowsByDataSourceItems(source)),\n                    // Insert items to show groups\n                    switchMap((rows: TableRow[]) =>\n                        this.isTreeTable\n                            ? of(rows)\n                            : this._tableService.groupRulesSubject.pipe(\n                                  map((groupRules) =>\n                                      this._tableRowService.groupTableRows(rows, groupRules.values(), groupRules)\n                                  )\n                              )\n                    )\n                )\n                .subscribe((rows) => {\n                    const isAccumulating =\n                        (this.pageScrolling || this.showGrowingButton) && this.getTableState().page.currentPage > 1;\n                    rows = isAccumulating ? [...this._tableRows, ...rows] : rows;\n                    this._setTableRows(rows);\n\n                    // After rows change, the intersection spy <tr> may already be visible\n                    // in the scroll container without the IntersectionObserver emitting a\n                    // new transition (e.g. after switching from a short dataset to a long\n                    // one, or when pageSize is small enough that accumulated rows still\n                    // don't fill the viewport). Schedule a visibility check and, if the\n                    // spy is within the viewport, manually trigger the next page load.\n                    if (this.pageScrolling) {\n                        this._recheckSpyIntersection();\n                    }\n                })\n        );\n\n        this._dataSourceDirective.childItems$\n            .pipe(\n                map((items) => {\n                    const rowMap = new Map<TableRow<T>, TableRow<T>[]>();\n                    items.forEach((rowItems, parentRow) => {\n                        rowMap.set(\n                            parentRow,\n                            this._createTableRowsByDataSourceItems(rowItems).map((row) => {\n                                row.parent = parentRow;\n                                row.level = parentRow.level + 1;\n                                row.hidden = !parentRow.expanded;\n                                return row;\n                            })\n                        );\n                    });\n\n                    return rowMap;\n                })\n            )\n            .subscribe((items) => {\n                items.forEach((rows, parentRow) => {\n                    let nestedChildrenCount = 0;\n\n                    function tallyNestedChildren(parent: TableRow<T>): void {\n                        if (parent.children) {\n                            nestedChildrenCount = nestedChildrenCount + parent.children.length;\n                            parent.children.forEach((child) => {\n                                tallyNestedChildren(child);\n                            });\n                        }\n                    }\n\n                    tallyNestedChildren(parentRow);\n\n                    this._tableRows.splice(parentRow.index + nestedChildrenCount + 1, 0, ...rows);\n\n                    parentRow.children.push(...rows);\n\n                    parentRow.lastChild = parentRow.children[parentRow.children.length - 1];\n                    this._setTableRows(this._tableRows);\n                });\n            });\n    }\n\n    /** @hidden */\n    private _listenToTableStateChanges(): void {\n        this._subscriptions.add(\n            this._tableService.tableStateChanges$.subscribe(() => {\n                this.presetChanged.emit(this.getCurrentPreset());\n            })\n        );\n        this._subscriptions.add(\n            this._tableService.needFetch$\n                .pipe(\n                    map(() => this._tableService.getTableState()),\n                    filter((state) => !!state && !!this._dataSourceDirective._tableDataSource),\n                    distinctUntilChanged()\n                )\n                .subscribe((state) => {\n                    this._dataSourceDirective._tableDataSource.fetch(state);\n                })\n        );\n        this._subscriptions.add(\n            this._tableService.stateChange$.subscribe(({ type, state }) => {\n                switch (type) {\n                    case 'columns':\n                        this._calculateVisibleColumns();\n                        this.recalculateTableColumnWidth();\n\n                        this.columnsChange.emit(new TableColumnsChangeEvent(this, state.current, state.previous));\n                        break;\n                    case 'filter':\n                        this.filterChange.emit(new TableFilterChangeEvent(this, state.current, state.previous));\n                        this.tableColumnFilterChange.emit();\n                        this._setAppliedFilterNames(state.current);\n                        break;\n                    case 'freeze':\n                        if (!this._lastFreezableColumnCalculation) {\n                            this.columnFreeze.emit(new TableColumnFreezeEvent(this, state.current, state.previous));\n                        }\n                        this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n                        break;\n                    case 'search':\n                        break;\n                    case 'group':\n                        this._calculateVisibleColumns();\n                        this.recalculateTableColumnWidth();\n\n                        this.groupChange.emit(new TableGroupChangeEvent(this, state.current, state.previous));\n                        break;\n                    case 'page':\n                        this.pageChange.emit(new TablePageChangeEvent(this, state.current, state.previous));\n                        break;\n                    case 'sort':\n                        this.sortChange.emit(new TableSortChangeEvent(this, state.current, state.previous));\n                        break;\n                }\n            })\n        );\n\n        this._listenToTableRowStateChange();\n    }\n\n    /** @hidden */\n    private _setAppliedFilterNames(filters: CollectionFilter[]): void {\n        const formattedFilters = filters.map((f) => ({\n            columnName: this._formatColumnName(f.fieldName || ''),\n\n            params: this._formatParams(f.value)\n        }));\n\n        this._appliedFilterNames.set(formattedFilters);\n    }\n\n    // Helper function to format nested parameters\n    private _formatParams(value: any): string {\n        if (typeof value !== 'object' || value === null) {\n            return String(value); // Handle non-object values\n        }\n\n        // handle array\n        if (Array.isArray(value)) {\n            return value.map((val) => this._formatParams(val)).join(', ');\n        }\n\n        return Object.entries(value)\n            .map(([key, val]) => `${key}: ${this._formatParams(val)}`) // Recursive call for nested objects\n            .join(', ');\n    }\n\n    /** @hidden */\n    private _formatColumnName(columnName: string): string {\n        return columnName.charAt(0).toUpperCase() + columnName.slice(1);\n    }\n\n    /** @hidden */\n    private _listenToTableRowStateChange(): void {\n        this._subscriptions.add(\n            this._tableRowService.scrollToOverlappedCell$.subscribe(() => {\n                this._scrollToOverlappedCell();\n            })\n        );\n\n        this._subscriptions.add(\n            this._tableRowService.loadChildRows$.subscribe((rows) => {\n                const state = this.getTableState();\n                rows.forEach((row) => {\n                    this._dataSourceDirective.childDataSource?.dataProvider\n                        .rowChildrenCount(row, state)\n                        .pipe(\n                            filter((count) => row.forceFetch || count > row.children.length),\n                            tap(() => (row.forceFetch = false)),\n                            take(1)\n                        )\n                        .subscribe(() => {\n                            const rowState = {\n                                ...state,\n                                ...{\n                                    page: {\n                                        currentPage: Math.floor(row.children.length / state.page.pageSize) + 1,\n                                        pageSize: state.page.pageSize\n                                    }\n                                }\n                            };\n                            this._dataSourceDirective.childDataSource?.fetch(rowState, [row]);\n                        });\n                });\n            })\n        );\n\n        this._subscriptions.add(\n            this._tableRowService.cellClicked$.subscribe((evt) => {\n                this._onCellClick(evt.index, evt.row);\n            })\n        );\n\n        this._subscriptions.add(\n            this._tableRowService.toggleAllSelectableRows$.subscribe((evt) => {\n                this._toggleAllSelectableRows(evt);\n            })\n        );\n\n        this._subscriptions.add(\n            this._tableRowService.toggleRow$.subscribe((evt) => {\n                switch (evt.type) {\n                    case 'toggleRow':\n                        this._toggleGroupRow(evt.row);\n                        break;\n                    case 'toggleMultiSelectRow':\n                        this._toggleMultiSelectRow(evt.row, evt.event);\n                        break;\n                    case 'toggleSingleSelectableRow':\n                        this._toggleSingleSelectableRow(evt.row);\n                        break;\n                }\n            })\n        );\n    }\n\n    /** @hidden */\n    private _createTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n        let rows: TableRow<T>[];\n        if (this.isTreeTable) {\n            rows = this._createTreeTableRowsByDataSourceItems(source);\n        } else {\n            rows = convertObjectsToTableRows(\n                source,\n                this._addedItems,\n                this.selectedKey,\n                this.rowNavigatable,\n                this.selectionMode,\n                this._tableRows,\n                this.rowComparator\n            );\n        }\n\n        if (this._shouldCheckNewRows && this.forceCheckedAllState) {\n            rows.forEach((row) => {\n                row.checked = row.checked || true;\n            });\n        }\n\n        return rows;\n    }\n\n    /** @hidden */\n    private _createTreeTableRowsByDataSourceItems(source: T[]): TableRow<T>[] {\n        const item = source[0] as any;\n\n        if (isTableRow(item)) {\n            return convertTreeTableRowToFlatList(source as TableRow[], this.rowNavigatable);\n        }\n\n        if (isJsObject(item)) {\n            return convertTreeObjectsToTableRows(\n                source,\n                this.selectionMode,\n                this._tableRows,\n                this.rowComparator,\n                this.relationKey,\n                this.hasChildrenKey,\n                this.selectedKey,\n                this.expandedStateKey,\n                this.rowNavigatable,\n                this.enableTristateMode\n            );\n        }\n        return [];\n    }\n\n    /** @hidden */\n    private _setTableRows(rows = this._dataSourceTableRows): void {\n        this._dataSourceTableRows = rows;\n        this._tableRows = [...this._newTableRows, ...this._dataSourceTableRows];\n        this.loadedRows$.set(this._tableRows.length);\n        this.onTableRowsChanged();\n        this._calculateIsShownNavigationColumn();\n        this._rangeSelector.reset();\n\n        this._shouldEmitRowsChange = true;\n\n        if (rows.length && !this._columnsWidthSet) {\n            this.recalculateTableColumnWidth();\n            this._columnsWidthSet = true;\n        }\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    private _calculateVisibleTableRows(): void {\n        this._tableRowsVisible = this._tableRows.filter((row) => !row.hidden);\n        if (this._virtualScrollDirective?.virtualScroll) {\n            this._virtualScrollDirective.calculateVirtualScrollRows();\n        } else {\n            this.setCurrentlyRenderedRows(0, this._tableRowsVisible.length);\n        }\n    }\n\n    /** @hidden */\n    private _listenToRowHeightChange(): void {\n        this._subscriptions.add(\n            this.contentDensityObserver.contentDensity$$\n                .pipe(\n                    tap(() => {\n                        this._setSelectionColumnWidth();\n                    }),\n                    filter(() => Array.from(ROW_HEIGHT.values()).includes(this.rowHeight)),\n                    filter(() => !this._rowHeightManuallySet)\n                )\n                .subscribe((contentDensity) => {\n                    this.rowHeight = ROW_HEIGHT.get(contentDensity) ?? ROW_HEIGHT.get(ContentDensityMode.COZY)!;\n                    if (this._virtualScrollDirective?.virtualScroll) {\n                        this._virtualScrollDirective.rowHeight = this.rowHeight;\n                        this._virtualScrollDirective.secondaryRowHeight = this.secondaryRowHeight;\n                        this._virtualScrollDirective.calculateVirtualScrollRows();\n                    }\n                })\n        );\n    }\n\n    /** @hidden */\n    private _listenToColumns(): void {\n        this.columns.changes.pipe(startWith(null)).subscribe(() => {\n            const columns = this.getTableColumns();\n            const prevColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n            const currentColumns = columns.map((column) => column.name);\n\n            const newColumns = columns\n                .filter((column) => column.visible && !prevColumns.includes(column.name))\n                .map((c) => c.name);\n            const stateColumns = this.getTableState().columns;\n\n            this._buildColumnsMap(columns);\n            this._tableService.tableColumns$.next(columns);\n\n            if (this._initialStateSet) {\n                this.setColumns([...stateColumns, ...newColumns]);\n            }\n\n            this._initialStateSet = true;\n\n            const updatedColumns = this._tableService.tableColumns$.value.map((column) => column.name);\n\n            if (!shallowEqual(updatedColumns, currentColumns)) {\n                this._tableService.stateChange$.next({\n                    type: 'columns',\n                    state: { previous: currentColumns, current: updatedColumns }\n                });\n                this._tableService.columnsChange$.next({ previous: currentColumns, current: updatedColumns });\n            }\n            this._tableService.detectChanges();\n        });\n    }\n\n    /**\n     * Construct visible columns for rendering purpose.\n     */\n    private _calculateVisibleColumns(): void {\n        const columnsDefinition = this.getTableColumns();\n        const { columns, groupBy } = this.getTableState();\n        const groupedColumnsToHide = groupBy.filter(({ showAsColumn }) => !showAsColumn).map(({ field }) => field);\n\n        const allColumns = columns // need to start mapping from state.columns list to keep right order\n            .map((name) => columnsDefinition.find((column) => column.name === name))\n            .filter((column): column is TableColumn => !!column)\n            .filter(({ key }) => !groupedColumnsToHide.includes(key));\n\n        const [visibleColumns, poppingColumns] = allColumns.reduce(\n            (acc, column) => {\n                if (column.responsiveState === 'hidden') {\n                    return acc;\n                }\n                acc[column.responsiveState === 'visible' ? 0 : 1].push(column);\n                return acc;\n            },\n            [[], []] as TableColumn[][]\n        );\n\n        this._tableService.setVisibleColumns(visibleColumns);\n        this._tableService.setPoppingColumns(poppingColumns);\n\n        this._cdr.detectChanges();\n\n        this._calculateTableColumnsLength();\n    }\n\n    /** @hidden */\n    private _calculateTableColumnsLength(): void {\n        const isGroupable = this.initialState?.initialGroupBy.length;\n        this._tableColumnsLength =\n            this.getTableColumns().length +\n            (this._isSelectionColumnShown || isGroupable ? 1 : 0) +\n            (this.rowNavigatable ? 1 : 0);\n    }\n\n    /** @hidden */\n    private _calculateIsShownNavigationColumn(): void {\n        this._tableService._isShownNavigationColumn$.set(this._tableRows.some((tableRow) => tableRow.navigatable));\n    }\n\n    /** @hidden */\n    private _setFreezableInfo(): void {\n        this._freezableColumns = getFreezableColumns(this._visibleColumns, this.freezeColumnsTo);\n        this._freezableEndColumns = getFreezableEndColumns(this._visibleColumns, this.freezeEndColumnsTo);\n        this.fixed = !!this.fixed || !!this._freezableColumns.size || !!this._freezableEndColumns.size;\n        this.columns.forEach((column) => {\n            column._freezed = this._freezableColumns.has(column.name);\n            column._endFreezed = this._freezableEndColumns.has(column.name);\n        });\n    }\n\n    /** @hidden */\n    private _buildColumnsMap(columns = this._tableService.tableColumns$.value): void {\n        this._keyToColumnMap = new Map(columns.map((column) => [column.key, column]));\n    }\n\n    /** @hidden */\n    private _calculateCheckedAll(): void {\n        const selectableRows = getSelectableRows(this._tableRows, this.selectableKey);\n        const totalSelected = selectableRows.filter((r) => r.checked);\n        this._checkedAll = totalSelected.length === selectableRows.length && selectableRows.length !== 0;\n        this._checkedAny = totalSelected.length > 0;\n        this._checkedState = this._checkedAll ? true : this._checkedAny ? null : false;\n    }\n\n    /**\n     * Propagates tristate selection mode to the tree. It starts with updating a state for all the parents and then\n     * to children\n     *\n     * @hidden\n     */\n    private _applyTristateSelection(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n        if (!this.enableTristateMode) {\n            return;\n        }\n        this._applySelectionToParents(row, addedRows, removedRows);\n        this._applySelectionToChildren(row, addedRows, removedRows);\n    }\n\n    /** @hidden */\n    private _applySelectionToParents(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n        let currentRow = row.parent;\n\n        while (currentRow) {\n            const children = findRowChildren(currentRow, this._tableRows).filter((r) => r.parent === currentRow);\n            const totalChecked: TableRow<T>[] = [];\n            const totalIndeterminate: TableRow<T>[] = [];\n            children.forEach((r) => {\n                if (r.checked === true) {\n                    totalChecked.push(r);\n                } else if (r.checked === null) {\n                    totalIndeterminate.push(r);\n                }\n            });\n            const checkedAll = totalChecked.length === children.length;\n            const checkedAny = totalChecked.length > 0;\n\n            currentRow.checked = checkedAll ? true : checkedAny || totalIndeterminate.length > 0 ? null : false;\n            currentRow.checked || currentRow.checked === null\n                ? addedRows.push(currentRow)\n                : removedRows.push(currentRow);\n\n            currentRow = currentRow.parent;\n        }\n    }\n\n    /** @hidden */\n    private _applySelectionToChildren(row: TableRow, addedRows: TableRow<T>[], removedRows: TableRow<T>[]): void {\n        applySelectionToChildren(this._tableRows, row, addedRows, removedRows);\n    }\n\n    /** @hidden */\n    private _listenToPageScrolling(): void {\n        this._subscriptions.add(\n            this._tableScrollDispatcher.scrolled().subscribe((scrollable) => {\n                // this block is handled in the virtual scroll directive for scrollWholeRows\n                if (!this._virtualScrollDirective?.scrollWholeRows) {\n                    const scrollTop = scrollable.getScrollTop();\n\n                    this.tableScrolled.emit(scrollTop);\n\n                    // Instead of having two places to record this position, we could just subscribe once.\n                    this.getTableState().scrollTopPosition = scrollTop;\n                }\n            })\n        );\n    }\n\n    /** @hidden */\n    private _listenToColumnPropertiesChange(): void {\n        this._subscriptions.add(\n            this._tableService.markForCheck$.pipe(debounceTime(5)).subscribe(() => this._cdr.markForCheck())\n        );\n        this._subscriptions.add(\n            this._tableService.detectChanges$.pipe(debounceTime(5)).subscribe(() => this._cdr.detectChanges())\n        );\n    }\n\n    /** @hidden */\n    private _listenToTableWidthChanges(): void {\n        this._subscriptions.add(\n            resizeObservable(this.tableContainer.nativeElement)\n                .pipe(\n                    tap(() => {\n                        // this._tableContainerScrollWidth = this.tableContainer.nativeElement.scrollWidth;\n                        this._checkCellMock();\n                    }),\n                    debounceTime(100)\n                )\n                .subscribe(() => {\n                    this.recalculateTableColumnWidth();\n                    if (this._freezableColumns.size || this._freezableEndColumns.size) {\n                        this._tableColumnResizeService.updateFrozenColumnsWidth();\n                        this._cdr.detectChanges();\n                    }\n                })\n        );\n\n        this._subscriptions.add(\n            resizeObservable(this.table.nativeElement).subscribe(() => {\n                // this._tableScrollWidth = this.table.nativeElement.scrollWidth;\n                this._checkCellMock();\n            })\n        );\n    }\n\n    /** @hidden */\n    private _listenToTableContainerMouseLeave(): void {\n        this._ngZone.runOutsideAngular(() => {\n            this._subscriptions.add(\n                fromEvent(this.tableContainer.nativeElement, 'mouseleave').subscribe(() =>\n                    this._tableColumnResizeService.hideResizer()\n                )\n            );\n        });\n    }\n\n    /** @hidden */\n    private _initScrollPosition(): void {\n        const state = this.getTableState();\n\n        if (!state.scrollTopPosition || this._tableRows.length === 0) {\n            return;\n        }\n        this.tableScrollable.initializeScrollTop(state.scrollTopPosition);\n    }\n\n    /**\n     * @hidden\n     * Resets editable rows discarding the editable rows array.\n     */\n    private _resetEditState(): void {\n        this._newTableRows = [];\n        this._addedItems = [];\n        this._forceSemanticHighlighting = false;\n        this._setSemanticHighlighting();\n        this._setTableRows();\n    }\n\n    /** @hidden */\n    private _listenToLoadingAndRefocusCell(): void {\n        this._subscriptions.add(\n            this._tableService.tableLoading$.pipe(filter((loadingState) => !loadingState)).subscribe(() => {\n                setTimeout(() => {\n                    if (this._tableHeaderResizer.focusedCellPosition && this._focusableGrid && !this.loadingState) {\n                        this._focusableGrid.focusCell(this._tableHeaderResizer.focusedCellPosition);\n                    }\n                });\n            })\n        );\n    }\n\n    /** @hidden */\n    private _onZoneFree(callback: () => void): void {\n        this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n            callback();\n        });\n    }\n\n    /** @hidden */\n    private _setSemanticHighlighting(): void {\n        this._tableService._semanticHighlighting$.set(this.semanticHighlighting);\n        this._tableService._semanticHighlightingColumnWidth$.set(this._semanticHighlightingColumnWidth);\n    }\n\n    /** @hidden */\n    private _setSelectionColumnWidth(): void {\n        this._selectionColumnWidth = this.isSelectionColumnShown\n            ? (SELECTION_COLUMN_WIDTH.get(this.contentDensityObserver.value) ?? 0)\n            : 0;\n    }\n\n    /** @hidden */\n    private _checkCellMock(): void {\n        this._tableColumnResizeService.cellMockVisible$.set(\n            this._tableColumnResizeService.fixedWidth &&\n                (this.tableContainer?.nativeElement?.scrollWidth ?? 0) > (this.table?.nativeElement?.scrollWidth ?? 0)\n        );\n    }\n\n    /**\n     * @hidden\n     * Listens to fixed column width subject and calculates last applicable frozen column based on `nonFrozenColumnsMinWidth` vaue.\n     */\n    private _listenToFixedColumnsWidth(): void {\n        this._calculateFrozenColumnRefresh$.next();\n        this._calculateFrozenColumnRefresh$.complete();\n\n        this._calculateFrozenColumnRefresh$ = new Subject();\n\n        this._tableColumnResizeService.fixedColumsWidthChange\n            .pipe(takeUntil(this._calculateFrozenColumnRefresh$))\n            .subscribe(() => this._calculateLastFreezableColumn());\n    }\n\n    private _calculateLastFreezableColumn(): void {\n        if (!this.tableScrollable || this._lastFreezableColumnCalculation) {\n            return;\n        }\n        this._lastFreezableColumnCalculation = true;\n        const allColumns = this._tableColumnResizeService.fixedColumsWidthChange.value;\n        const allFrozenColumns = uniq([\n            ...this._freezableColumns.keys(),\n            this.freezeColumnsTo,\n            ...this._freezableEndColumns.keys()\n        ]);\n        const columnSize = {\n            frozen: new Map<string, number>(),\n            unFrozen: new Map<string, number>()\n        };\n        allColumns.forEach((size, column) => {\n            columnSize[allFrozenColumns.includes(column) ? 'frozen' : 'unFrozen'].set(column, parseInt(size, 10));\n        });\n\n        const frozenColumnSizes = [...columnSize.frozen.values()];\n\n        if (frozenColumnSizes.length === 0) {\n            this._lastFreezableColumnCalculation = false;\n            return;\n        }\n\n        const totalFrozenSize = [...columnSize.frozen.values()].reduce((sum, size) => sum + size);\n\n        let diff = this.tableScrollable.elementRef.nativeElement.getBoundingClientRect().width - totalFrozenSize;\n        const freezedColumns = [...this._freezableColumns.keys()];\n\n        if (diff >= this.nonFrozenColumnsMinWidth) {\n            this._lastFreezableColumnCalculation = false;\n            return;\n        }\n\n        let lastColumn: string;\n\n        while (diff < this.nonFrozenColumnsMinWidth) {\n            if (freezedColumns.length === 0) {\n                break;\n            }\n\n            lastColumn = freezedColumns.pop()!;\n            diff += columnSize.frozen.get(lastColumn)!;\n        }\n\n        this._lastFreezableColumnCalculation = false;\n\n        this.freezeToColumn(freezedColumns[freezedColumns.length - 1]);\n    }\n\n    /** @hidden */\n    private _setMockScrollbarPosition(rtl: boolean | undefined): void {\n        if (this.tableScrollMockContainer) {\n            this.tableScrollMockContainer.nativeElement.style.left = rtl ? '0' : 'auto';\n            this.tableScrollMockContainer.nativeElement.style.right = rtl ? 'auto' : '0';\n        }\n    }\n}\n","@if (tableToolbar) {\n    <!-- Toolbar -->\n    <ng-template\n        [ngTemplateOutlet]=\"tableToolbar.contentTemplateRef\"\n        [ngTemplateOutletContext]=\"_toolbarContext\"\n    ></ng-template>\n}\n<fd-busy-indicator\n    [loading]=\"\n        (_tableService.tableLoading$ | async) === true && _dataSourceDirective._firstLoadingDone && !pageScrolling\n    \"\n    [block]=\"true\"\n    [preventWheelEvents]=\"pageScrolling && !!_virtualScrollDirective?.scrollWholeRows\"\n>\n    <!-- Table Container -->\n    <div class=\"fdp-table__container\" #tableContainer>\n        <ng-template [ngTemplateOutlet]=\"tableTemplate\"></ng-template>\n        @if (enableDragResize) {\n            <!-- Table column resizer for visually representing the resizing process -->\n            <fdp-table-column-resizer class=\"fdp-table__column-resizer\"></fdp-table-column-resizer>\n        }\n    </div>\n    @if (showGrowingButton) {\n        <fdp-table-growing-button [showItemsCount]=\"showItemsCount\"></fdp-table-growing-button>\n    }\n</fd-busy-indicator>\n<!-- Table Template -->\n<ng-template #tableTemplate>\n    <div\n        class=\"fdp-table__body fd-scrollbar\"\n        [class.fdp-table__body--virtual-scroll]=\"!!_virtualScrollDirective?.virtualScroll\"\n        [style.position]=\"\n            !!_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows\n                ? 'relative'\n                : 'static'\n        \"\n        [class.fdp-table__body--disable-scroll]=\"\n            !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n        \"\n        fdpTableScrollable\n        #tableScrollable=\"tableScrollable\"\n        [style.height]=\"bodyHeight\"\n        [class.fixed-height]=\"!!bodyHeight\"\n        [attr.role]=\"pageScrolling ? 'feed' : null\"\n        [class.fd-table--fixed]=\"_freezableColumns.size || fixed\"\n    >\n        <table\n            fd-table\n            [attr.role]=\"isTreeTable ? 'treegrid' : 'grid'\"\n            class=\"fdp-table__body-table\"\n            [allCellsFocusable]=\"true\"\n            [popIn]=\"_tableService.poppingColumns$().length > 0\"\n            [class.fd-table--no-outer-border]=\"noOuterBorders\"\n            [attr.aria-labelledby]=\"_ariaLabelledBy\"\n        >\n            <thead fd-table-header [nonInteractive]=\"nonInteractiveHeader\" class=\"fdp-table__header\">\n                <tr\n                    fdp-table-header-row\n                    [noBorders]=\"noBorders\"\n                    [noHorizontalBorders]=\"noHorizontalBorders\"\n                    [noVerticalBorders]=\"noVerticalBorders\"\n                    [rowId]=\"id\"\n                    [fixed]=\"fixed\"\n                    [isShownSelectionColumn]=\"isSelectionColumnShown\"\n                    [checkedState]=\"_checkedState\"\n                    [selectionMode]=\"_selectionMode\"\n                    [selectionColumnWidth]=\"_selectionColumnWidth\"\n                    [freezeColumnsTo]=\"freezeColumnsTo\"\n                    [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n                    (keydown.enter)=\"_onRowClick(null, $event)\"\n                    (keydown.space)=\"_onRowClick(null, $event)\"\n                    (click)=\"_onRowClick(null, $event)\"\n                    [disableSelectionCheckbox]=\"_dataSourceTableRows.length === 0\"\n                ></tr>\n            </thead>\n            @if (!!_tableRowsVisible.length && _tableService.visibleColumnsLength() > 0) {\n                <tbody\n                    fd-table-body\n                    fdkDndList\n                    #tableBody\n                    [dragoverPredicate]=\"_dndTableDirective?.dragoverPredicate\"\n                    [dropPredicate]=\"_dndTableDirective?.dropPredicate\"\n                    [noBorderX]=\"noBorderX || noBorders\"\n                    [noBorderY]=\"noBorderY || noBorders\"\n                    [tabIndex]=\"pageScrolling ? 0 : -1\"\n                    [items]=\"_dndTableRowsPlaceholder\"\n                    [draggable]=\"isDraggable\"\n                    [dropMode]=\"_dndTableDirective?.dropMode ?? 'group'\"\n                    (itemDropped)=\"_dndTableDirective?.dragDropItemDrop($event)\"\n                    (dropPredicateCalculating)=\"_calculatingLoading($event)\"\n                    (dropCancelled)=\"_dndTableDirective?.dropCancelled()\"\n                >\n                    @for (rowIndex of _tableCurrentlyRenderedRowsPlaceholder; track _rowTrackBy($index, rowIndex)) {\n                        @if (_tableRowsVisible[rowIndex]; as row) {\n                            @switch (row.type) {\n                                @case ('group') {\n                                    <tr\n                                        fdp-table-group-row\n                                        [style.max-height.px]=\"\n                                            _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n                                        \"\n                                        [index]=\"rowIndex\"\n                                        [height]=\"rowHeight\"\n                                        [draggable]=\"isDraggable\"\n                                        [row]=\"row\"\n                                        [rowId]=\"id\"\n                                        [keyToColumnMap]=\"_keyToColumnMap\"\n                                        (toggleGroupRow)=\"_toggleGroupRow($event)\"\n                                        (click)=\"_emitRowActivate(row, $event.ctrlKey || $event.metaKey)\"\n                                    ></tr>\n                                }\n                                @default {\n                                    <tr\n                                        [fdkDndItem]=\"row\"\n                                        [applyDragItemClass]=\"isDraggable\"\n                                        [class]=\"row | rowClasses: rowsClass\"\n                                        [tabindex]=\"\n                                            !_tableService.poppingColumns$()?.length &&\n                                            (rowsActivable || !!row.navigatable)\n                                                ? 0\n                                                : -1\n                                        \"\n                                        [focusable]=\"\n                                            !_tableService.poppingColumns$()?.length &&\n                                            (rowsActivable || !!row.navigatable)\n                                        \"\n                                        [hoverable]=\"rowsActivable || isSelectionColumnShown || !!row.navigatable\"\n                                        [activable]=\"rowsActivable || !!row.navigatable\"\n                                        [active]=\"rowIndex === _navigatedRowIndex\"\n                                        [highlightActive]=\"highlightNavigatedRow\"\n                                        [style.max-height.px]=\"\n                                            _virtualScrollDirective?.scrollWholeRows ? rowHeight : 'auto'\n                                        \"\n                                        [style.height.px]=\"rowHeight\"\n                                        [attr.aria-level]=\"isTreeTable ? row.level + 1 : null\"\n                                        (keydown.enter)=\"_onRowClick(row, $event)\"\n                                        (keydown.space)=\"_onRowClick(row, $event)\"\n                                        (click)=\"_onRowClick(row, $event)\"\n                                        (started)=\"_onDragStarted(row, $index, rowIndex)\"\n                                        [main]=\"true\"\n                                        [class.fd-table__row--draggable]=\"isDraggable\"\n                                        fdp-table-row\n                                        [attr.aria-rowindex]=\"rowIndex + 1\"\n                                        [rowId]=\"id\"\n                                        [class.fd-tr-hovered]=\"!row.checked && hoveredRowIndex$() === rowIndex\"\n                                        [index]=\"rowIndex\"\n                                        [row]=\"row\"\n                                        [selectionMode]=\"_selectionMode\"\n                                        [selectableKey]=\"selectableKey\"\n                                        [enableTristateMode]=\"enableTristateMode\"\n                                        [fixed]=\"fixed\"\n                                        [selectionColumnWidth]=\"_selectionColumnWidth\"\n                                        [freezeColumnsTo]=\"freezeColumnsTo\"\n                                        [freezeEndColumnsTo]=\"freezeEndColumnsTo\"\n                                    ></tr>\n                                }\n                            }\n                            @if (row.type === 'item' && _tableService.poppingColumns$().length > 0) {\n                                <tr\n                                    (keydown.enter)=\"_onRowClick(row, $event)\"\n                                    (keydown.space)=\"_onRowClick(row, $event)\"\n                                    (click)=\"_onRowClick(row, $event)\"\n                                    fdp-table-popping-row\n                                    [secondary]=\"true\"\n                                    [style.cursor]=\"rowsActivable || !!row.navigatable ? 'pointer' : 'auto'\"\n                                    [style.height.px]=\"secondaryRowHeight\"\n                                    [selectionMode]=\"selectionMode\"\n                                    [row]=\"row\"\n                                    [checked]=\"row.checked\"\n                                    [class]=\"row | rowClasses: rowsClass\"\n                                    (toggleGroupRow)=\"_toggleGroupRow($event)\"\n                                    (cellClicked)=\"_onCellClick($event.index, $event.row)\"\n                                    (mouseenter)=\"handleMouseEnter(rowIndex)\"\n                                    (mouseleave)=\"handleMouseLeave()\"\n                                ></tr>\n                            }\n                            @if (row.children.length === 0 && (row.childItemsLoading$ | async)) {\n                                @for (_ of loadingRowRange; track $index) {\n                                    <tr fd-table-row>\n                                        @for (_ of loadingColumnsRange; track $index) {\n                                            <td fd-table-cell>\n                                                <fd-skeleton\n                                                    [style.margin]=\"'auto 0'\"\n                                                    type=\"text\"\n                                                    textLines=\"1\"\n                                                    width=\"60%\"\n                                                ></fd-skeleton>\n                                            </td>\n                                        }\n                                    </tr>\n                                }\n                            }\n                            <!-- Last rendered child row. -->\n                            @if (row.parent?.lastChild?.index === row.index) {\n                                <tr\n                                    aria-hidden=\"true\"\n                                    class=\"fd-table__intersection-spy\"\n                                    [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n                                    (intersected)=\"$event && _tableRowService.loadChildRows(row.parent!)\"\n                                    [style.top.px]=\"pageScrollingThreshold * -1\"\n                                ></tr>\n                            }\n                        }\n                    }\n                    @if (pageScrolling && !_virtualScrollDirective?.scrollWholeRows) {\n                        <tr\n                            aria-hidden=\"true\"\n                            class=\"fd-table__intersection-spy\"\n                            [fdkIntersectionSpy]=\"pageScrollingThreshold\"\n                            (intersected)=\"$event && _onSpyIntersect($event)\"\n                            [style.top.px]=\"pageScrollingThreshold * -1\"\n                        ></tr>\n                        @if (\n                            (_tableService.tableLoading$ | async) === true &&\n                            _dataSourceDirective._firstLoadingDone &&\n                            pageScrolling\n                        ) {\n                            <tr fd-table-row>\n                                @for (_ of loadingColumnsRange; track $index) {\n                                    <td fd-table-cell>\n                                        <fd-skeleton\n                                            [style.margin]=\"'auto 0'\"\n                                            type=\"text\"\n                                            textLines=\"1\"\n                                            width=\"100%\"\n                                        ></fd-skeleton>\n                                    </td>\n                                }\n                            </tr>\n                        }\n                    }\n                </tbody>\n            } @else {\n                @if (!_dataSourceDirective._firstLoadingDone) {\n                    <tbody fd-table-body>\n                        @for (_ of loadingRowRange; track $index) {\n                            <tr fd-table-row>\n                                @for (_ of loadingColumnsRange; track $index) {\n                                    <td fd-table-cell>\n                                        <fd-skeleton\n                                            [style.margin]=\"'auto 0'\"\n                                            type=\"text\"\n                                            textLines=\"1\"\n                                            width=\"60%\"\n                                        ></fd-skeleton>\n                                    </td>\n                                }\n                            </tr>\n                        }\n                    </tbody>\n                } @else {\n                    <tbody fd-table-body class=\"fdp-table__empty\">\n                        <tr fd-table-row>\n                            <td fd-table-cell class=\"fd-table__cell--no-data\" colspan=\"100%\">\n                                <div class=\"fdp-table__empty-table-message\">\n                                    <ng-content select=\"fdp-table-no-data-wrapper\"></ng-content>\n                                    @if (!_noDataWrapper && _tableService.visibleColumnsLength() > 0) {\n                                        <div>\n                                            {{\n                                                emptyTableMessage ||\n                                                    ('platformTable.defaultEmptyMessage' | fdTranslate)()\n                                            }}\n                                        </div>\n                                    } @else if (_tableService.visibleColumnsLength() === 0) {\n                                        <div>\n                                            {{\n                                                noVisibleColumnsMessage ||\n                                                    ('platformTable.noVisibleColumnsMessage' | fdTranslate)()\n                                            }}\n                                        </div>\n                                    }\n                                </div>\n                            </td>\n                        </tr>\n                    </tbody>\n                }\n            }\n            @if (pageScrolling) {\n                <tbody class=\"fd-table__body__focus-mock\"></tbody>\n            }\n            @if (_virtualScrollDirective?.virtualScroll && !_virtualScrollDirective?.scrollWholeRows) {\n                <!-- the tbody element below is so the scrollbar renders correctly -->\n                <tbody>\n                    <tr>\n                        <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective!.virtualScrollTotalHeight\"></td>\n                    </tr>\n                </tbody>\n            }\n            <!-- the tbody element below is so the scrollbar renders correctly -->\n            @if (_virtualScrollDirective?.virtualScroll && _virtualScrollDirective?.scrollWholeRows) {\n                <tbody\n                    [class.fd-table__body--scroll-mock]=\"!!_virtualScrollDirective?.scrollWholeRows\"\n                    [class.fdp-table__body--disable-scroll]=\"\n                        !!_dndTableDirective?.dragDropInProgress && !_virtualScrollDirective?.scrollWholeRows\n                    \"\n                    #tableScrollMockContainer\n                >\n                    <tr>\n                        <td colspan=\"100%\" [style.height.px]=\"_virtualScrollDirective?.virtualScrollTotalHeight\"></td>\n                    </tr>\n                </tbody>\n            }\n            @if (showTableFooter) {\n                <tfoot fd-table-footer>\n                    <tr fdp-table-footer-row></tr>\n                </tfoot>\n            }\n        </table>\n    </div>\n</ng-template>\n<!-- Empty Table Message -->\n","import { NgModule } from '@angular/core';\n\nimport { TableHelpersModule } from '@fundamental-ngx/platform/table-helpers';\n\nimport {\n    FilterCustomComponent,\n    FilterMultiSelectComponent,\n    FilterRuleComponent,\n    FilterSingleSelectComponent,\n    FilterStepComponent,\n    FiltersComponent,\n    FiltersListStepComponent,\n    GroupingComponent,\n    P13ColumnsDialogComponent,\n    P13FilteringDialogComponent,\n    P13GroupingDialogComponent,\n    ResetButtonComponent,\n    SortingComponent,\n    TableColumnComponent,\n    TableP13ColumnsComponent,\n    TableP13DialogComponent,\n    TableP13FilterComponent,\n    TableP13GroupComponent,\n    TableP13SortComponent,\n    TableToolbarActionsComponent,\n    TableToolbarComponent,\n    TableViewSettingsDialogComponent,\n    TableViewSettingsFilterComponent\n} from './components';\nimport {\n    GetAvailableSortColumnsPipe,\n    P13SortingDialogComponent\n} from './components/table-p13-dialog/sorting/sorting.component';\nimport { TableComponent } from './table.component';\n\nimport { NoDataWrapperComponent, PlatformTableColumnResizerComponent } from './components';\nimport { TableEditableCellComponent } from './components/table-editable-cell/table-editable-cell.component';\nimport { TableToolbarLeftActionsComponent } from './components/table-toolbar/table-toolbar-left-actions.component';\n\nimport { TableCellHeaderPopoverComponent, TableHeaderCellContentComponent } from './components';\nimport { TableGrowingButtonComponent } from './components/growing-button/table-growing-button.component';\nimport { TableFooterRowComponent } from './components/table-footer-row/table-footer-row.component';\nimport { TableGroupRowComponent } from './components/table-group-row/table-group-row.component';\nimport {\n    IsColumnHasHeaderMenuPipe,\n    TableHeaderRowComponent\n} from './components/table-header-row/table-header-row.component';\nimport { TablePoppingRowComponent } from './components/table-popping-row/table-popping-row.component';\nimport { TableRowComponent } from './components/table-row/table-row.component';\n\nconst EXPORTABLE_DECLARATIONS = [\n    TableComponent,\n    TableColumnComponent,\n    TableToolbarComponent,\n    TableToolbarActionsComponent,\n    TableViewSettingsDialogComponent,\n    TableViewSettingsFilterComponent,\n    SortingComponent,\n    GroupingComponent,\n    FiltersComponent,\n    FiltersListStepComponent,\n    FilterStepComponent,\n    FilterSingleSelectComponent,\n    FilterMultiSelectComponent,\n    FilterCustomComponent,\n    ResetButtonComponent,\n    TableP13DialogComponent,\n    TableP13SortComponent,\n    TableP13FilterComponent,\n    TableP13GroupComponent,\n    TableP13ColumnsComponent,\n    P13SortingDialogComponent,\n    P13GroupingDialogComponent,\n    P13FilteringDialogComponent,\n    FilterRuleComponent,\n    P13ColumnsDialogComponent,\n    PlatformTableColumnResizerComponent,\n    NoDataWrapperComponent,\n    GetAvailableSortColumnsPipe,\n    TableEditableCellComponent,\n    TableToolbarLeftActionsComponent,\n    TableHeaderCellContentComponent,\n    TableCellHeaderPopoverComponent,\n    TableRowComponent,\n    TableGroupRowComponent,\n    TablePoppingRowComponent,\n    TableHeaderRowComponent,\n    IsColumnHasHeaderMenuPipe,\n    TableGrowingButtonComponent,\n    TableFooterRowComponent\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule],\n    exports: [...EXPORTABLE_DECLARATIONS, TableHelpersModule]\n})\nexport class PlatformTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","ListComponent","i2","NOT_SELECTED_OPTION_VALUE","dialogConfig","i3","CoreTableService","FdTableComponent","CoreTableComponent"],"mappings":"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"}