ngxsmk-datatable
Version:
A powerful, feature-rich Angular datatable component with virtual scrolling, built for Angular 17+
68 lines (67 loc) • 2.61 kB
TypeScript
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
export interface VirtualScrollState {
startIndex: number;
endIndex: number;
visibleItems: any[];
totalHeight: number;
scrollTop: number;
}
export interface HorizontalVirtualScrollState {
startColumnIndex: number;
endColumnIndex: number;
visibleColumns: any[];
totalWidth: number;
scrollLeft: number;
leftOffset: number;
}
export declare class VirtualScrollService {
private stateSubject;
state$: Observable<VirtualScrollState>;
calculateVisibleItems(items: any[], containerHeight: number, itemHeight: number, scrollTop: number, bufferSize?: number): VirtualScrollState;
scrollToItem(itemIndex: number, itemHeight: number, containerHeight: number): number;
getItemOffset(itemIndex: number, itemHeight: number): number;
isItemVisible(itemIndex: number, startIndex: number, endIndex: number): boolean;
getVisibleRange(scrollTop: number, containerHeight: number, itemHeight: number, totalItems: number, bufferSize?: number): {
start: number;
end: number;
};
calculateScrollPosition(targetIndex: number, itemHeight: number, containerHeight: number): number;
getSpacerHeight(startIndex: number, endIndex: number, itemHeight: number, totalItems: number): {
top: number;
bottom: number;
};
/**
* Calculate visible columns based on horizontal scroll position
*/
calculateVisibleColumns(columns: any[], columnWidths: {
[key: string]: number;
}, containerWidth: number, scrollLeft: number, bufferSize?: number): HorizontalVirtualScrollState;
/**
* Scroll to a specific column
*/
scrollToColumn(columnIndex: number, columnWidths: {
[key: string]: number;
}, columns: any[], containerWidth: number): number;
/**
* Get spacer widths for horizontal virtual scrolling
*/
getHorizontalSpacerWidth(startColumnIndex: number, endColumnIndex: number, columnWidths: {
[key: string]: number;
}, columns: any[]): {
left: number;
right: number;
};
/**
* Check if a column is currently visible in the viewport
*/
isColumnVisible(columnIndex: number, startColumnIndex: number, endColumnIndex: number): boolean;
/**
* Get total width of all columns
*/
getTotalColumnsWidth(columns: any[], columnWidths: {
[key: string]: number;
}): number;
static ɵfac: i0.ɵɵFactoryDeclaration<VirtualScrollService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<VirtualScrollService>;
}