/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2026 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ import { Ref } from 'vue'; import { RowHeightService } from '@progress/kendo-vue-common'; import { GroupState } from '@progress/kendo-vue-data-tools'; import { DataItemWrapper } from '../utils/main'; import { StickyGroupTable } from '../components/StickyGroupTable'; /** * @hidden * Represents the range of a group within the flat data array. */ export interface GroupRange { headerIndex: number; footerIndex: number | null; firstChildIndex: number; lastChildIndex: number; level: number; } /** * @hidden * Builds a map of group ranges from the flat data array. * Each group header maps to its footer and child range. */ export declare function buildGroupRangeMap(flatDataArray: DataItemWrapper[]): Map; /** * @hidden * Pairs a DataItemWrapper with its flat-data index. */ export interface StickyGroupItem { item: DataItemWrapper; flatIndex: number; } /** * @hidden */ export declare function computeStickyItems(flatDataArray: DataItemWrapper[], groupRanges: Map, firstVisibleIndex: number, lastVisibleIndex: number, rawFirstVisibleIndex?: number): StickyGroupItem[]; /** * @hidden * Computes which group footers should be sticky at the bottom of the viewport. * A footer is sticky when it is scrolled below the viewport but its group's * header (or first child) is still visible above. */ export declare function computeStickyFooterItems(flatDataArray: DataItemWrapper[], groupRanges: Map, firstVisibleIndex: number, lastVisibleIndex: number): StickyGroupItem[]; /** * @hidden * Composable that computes which group header/footer should be sticky * based on the scroll position and the flat data array. * Uses refs + direct DOM manipulation to avoid render-cycle flicker. */ export declare function useStickyGroups(options: { enabled: boolean; enabledFooters?: boolean; flatData: Ref; stickyHeaderRef: Ref | null>; stickyFooterRef: Ref | null>; containerRef: Ref; tableBodyRef: Ref; rowHeight?: number; isGrouped: Ref; virtualSkipRef?: Ref; rowHeightServiceRef?: Ref; }): { stickyHeaderItems: Ref; stickyFooterItems: Ref; scrollToStickyGroup: (group: GroupState) => void; update: () => void; };