/**----------------------------------------------------------------------------------------- * Copyright © 2026 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { OnInit, EventEmitter, ElementRef, OnDestroy, AfterViewInit, AfterViewChecked, SimpleChange, OnChanges, InjectionToken, QueryList, NgZone, Renderer2, TrackByFunction, ChangeDetectorRef, TemplateRef } from '@angular/core'; import { Observable } from 'rxjs'; import { RowHeightService } from '../scrolling/row-height.service'; import { ScrollerService, Action } from '../scrolling/scroller.service'; import { ScrollRequestService } from '../scrolling/scroll-request.service'; import { ColumnBase } from '../columns/column-base'; import { DetailTemplateDirective } from './details/detail-template.directive'; import { DetailsService } from './details/details.service'; import { ColumnsContainer } from '../columns/columns-container'; import { GroupDescriptor, SortDescriptor } from '@progress/kendo-data-query'; import { GroupableSettings } from '../grouping/group-settings'; import { ChangeNotificationService } from '../data/change-notification.service'; import { NoRecordsTemplateDirective } from './no-records-template.directive'; import { SuspendService } from '../scrolling/suspend.service'; import { GroupsService } from "../grouping/groups.service"; import { RowClassFn, RowStickyFn } from './common/row-class'; import { ScrollSyncService } from "../scrolling/scroll-sync.service"; import { ResizeService } from "../layout/resize.service"; import { ResizeSensorComponent } from "@progress/kendo-angular-common"; import { ScrollbarService } from '@progress/kendo-angular-common'; import { SelectableSettings } from '../selection/types'; import { EditService } from '../editing/edit.service'; import { NavigationService } from '../navigation/navigation.service'; import { FilterableSettings } from '../filtering/filterable'; import { ColumnResizingService } from "../column-resizing/column-resizing.service"; import { GridItem } from '../data/grid-item.interface'; import { PDFService } from '../pdf/pdf.service'; import { ColumnInfoService } from '../common/column-info.service'; import { GridSize } from '../common/size-options'; import { ContextService } from '../common/provider.service'; import { DataMappingService } from '../data/data-mapping.service'; import { StickyGroupContainerComponent } from '../grouping/sticky-groups/sticky-group-container.component'; import { StickyGroupsService } from '../grouping/sticky-groups/sticky-groups.service'; import * as i0 from "@angular/core"; /** * @hidden */ export declare const SCROLLER_FACTORY_TOKEN: InjectionToken; /** * @hidden */ export declare function DEFAULT_SCROLLER_FACTORY(observable: Observable, ctx: ContextService): ScrollerService; /** * @hidden */ export declare class ListComponent implements OnInit, OnDestroy, AfterViewInit, AfterViewChecked, OnChanges { private changeNotification; private suspendService; private groupsService; private ngZone; private renderer; private scrollSyncService; private resizeService; private editService; private supportService; private navigationService; private ctx; private columnResizingService; private changeDetector; private pdfService; private columnInfo; private dataMappingService; private stickyGroupsService; hostClass: boolean; hostRole: string; data: Array; groups: Array; total: number; rowHeight: number; detailRowHeight: number; take: number; skip: number; columns: ColumnsContainer; detailTemplate: DetailTemplateDirective; noRecordsTemplate: NoRecordsTemplateDirective; selectable: SelectableSettings | boolean; groupable: GroupableSettings | boolean; filterable: FilterableSettings; rowClass: RowClassFn; rowSticky: RowStickyFn; loading: boolean; trackBy: TrackByFunction; virtualColumns: boolean; isVirtual: boolean; cellLoadingTemplate: TemplateRef; loadingTemplate: TemplateRef; sort: Array; size: GridSize; contentScroll: EventEmitter; pageChange: EventEmitter; scrollBottom: EventEmitter; columnsStartIdx: number; allItems: any[]; itemsToRender: any[]; stickyGroupHeaderColumns: any[]; private stickyNeedsUpdate; private stickyWasEnabled; private pendingToggleScroll; private skipScrollerAdjust; private suppressStickyUpdates; private suppressFocusScrollAdjust; get hasStickyHeaders(): boolean; get hasStickyFooters(): boolean; get showFooter(): boolean; get totalWidth(): number; container: ElementRef; lockedContainer: ElementRef; lockedTable: ElementRef; table: ElementRef; resizeSensors: QueryList; stickyHeaderContainer: StickyGroupContainerComponent; stickyFooterContainer: StickyGroupContainerComponent; private scroller; private scrollerFactory; private subscriptions; private scrollerSubscription; private dispatcher; rowHeightService: RowHeightService; private skipScroll; private rebind; private containerScrollTop; private viewportColumns; private columnsEndIdx; private viewportColumnsWidth; private scrollLeft; private virtualPageSize; private observer; get lockedLeafColumns(): QueryList; get nonLockedLeafColumns(): QueryList; get nonLockedColumnsToRender(): QueryList; get leafColumns(): Array; get lockedWidth(): number; get nonLockedWidth(): number; get isLocked(): boolean; private rtl; private columnUpdateFrame; private hasLockedContainer; private minRowHeight; private handleSkipOnData; private scrollToIndex; constructor(scrollerFactory: any, detailsService: DetailsService, changeNotification: ChangeNotificationService, suspendService: SuspendService, groupsService: GroupsService, ngZone: NgZone, renderer: Renderer2, scrollSyncService: ScrollSyncService, resizeService: ResizeService, editService: EditService, supportService: ScrollbarService, navigationService: NavigationService, scrollRequestService: ScrollRequestService, ctx: ContextService, columnResizingService: ColumnResizingService, changeDetector: ChangeDetectorRef, pdfService: PDFService, columnInfo: ColumnInfoService, dataMappingService: DataMappingService, stickyGroupsService: StickyGroupsService); ngOnInit(): void; ngOnChanges(changes: { [propertyName: string]: SimpleChange; }): void; private zoneSub; private get totalIsAllItems(); private rebindGroupedDataFlag; ngDoCheck(): void; ngAfterViewInit(): void; ngAfterViewChecked(): void; syncRowsHeight(): void; ngOnDestroy(): void; init(): void; /** * Resets all virtual scrolling state when the data source changes. * Recreates everything as if the grid was just initialized for the first time. * @hidden */ resetVirtualScroll(newTotal: number): void; /** * After a column resize, rows may become shorter due to reduced text wrapping, leaving empty * space at the bottom of the viewport. Expands `itemsToRender` to fill the gap using * already-loaded data. Must be called after `scroller.update()` so that the row height * service reflects the new actual row heights. * @hidden */ fillViewportAfterColumnChange(): void; /** * Recalculates the virtual page size after the scrollable container height changes * due to pinned row containers appearing or disappearing. Expands itemsToRender * if the new viewport can display more rows than currently rendered. * @hidden */ onPinnedContainerHeightChange(): void; /** * Checks if the virtual scroll state is out of sync with the expected position. * Used to determine if resetVirtualScroll should be called. * @hidden */ isVirtualScrollOutOfSync(): boolean; lockedScroll(): void; lockedMousewheel(args: any): void; lockedKeydown(args: any): void; updateViewportColumns(range?: any): void; /** * @hidden */ get isStacked(): boolean; /** * @hidden * Updates sticky group header columns for the overlay. Called in ngDoCheck or on column changes. */ updateStickyGroupHeaderColumns(): void; /** * Measures actual rendered row heights from the DOM and feeds them into * RowHeightService so its offsets reflect reality. Called in ngAfterViewChecked * when stickyNeedsUpdate is true (data changed or scroll-to-group requested). */ private updateStickyRowHeights; /** * Handles sticky overlay header click: scrolls to the topmost sticky * group header's real position so all overlay headers become visible * real rows, then toggles the clicked group. */ private handleStickyScrollAndToggle; /** * After toggle, fixes up the virtual page so the correct rows are rendered * around the target scroll position that was set pre-toggle. */ private applyPendingToggleScroll; /** * Scrolls the container so the real footer row at the pending flat index * is visible at the bottom edge of the viewport. */ private scrollToStickyFooterTarget; /** * Scrolls the real grid body until the requested row is rendered in the real * tbody, then focuses the corresponding real grid cell. */ private scrollToStickyRowTarget; /** * Focuses the rendered row requested from the sticky overlay. */ private focusRenderedStickyRow; private getStickyTargetTbody; private findStickyTargetRow; /** * Converts a sticky overlay flat-index request into a logical grid cell * position that NavigationService can focus. */ private stickyTargetToLogicalCell; private updateStickyGroups; resetNavigationViewport(): void; private detailExpand; private attachContainerScroll; private createScroller; private scroll; private onContainerScroll; private handleRowSync; private handleRowNavigationLocked; private scrollToVirtualRow; private getStickyAdjustedScrollTop; private scrollTo; private scrollToItem; private cleanupScroller; private initResizeService; private syncContainerHeight; private handleColumnScroll; private updateColumnViewport; private calculateViewportColumns; private viewportWidthChange; private normalizeScrollLeft; private elementScrollLeft; private calcVirtualPageSize; private setScrollerOptions; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }