@fundamental-ngx/platform 0.62.0 → 0.62.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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 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 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 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 <span fd-list-title>{{ filter.label }}</span>\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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"}
1
+ {"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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"}