import { ComputedRef, CSSProperties, MaybeRef, Ref, StyleValue, UnwrapRef } from 'vue';
import type { ViewerPdfPage, ElementRect, VisibleArea } from '@/utils/types';
import { ScrollMode, ViewMode, ZoomLevel } from '@/utils/enumerators';
import type { PDFDocumentProxy } from 'pdfjs-dist';
interface UseVirtualListItem<T> {
    data: T;
    index: number;
}
export interface UseVirtualListReturn {
    list: Ref<UseVirtualListItem<ViewerPdfPage>[]>;
    scrollTo: (index: number, rect?: ElementRect) => void;
    pageGroups: ComputedRef<Array<UseVirtualListItem<ViewerPdfPage>[]> | undefined>;
    containerProps: {
        ref: Ref<HTMLElement | null>;
        onScroll: () => void;
        style: StyleValue;
    };
    wrapperProps: ComputedRef<{
        style: CSSProperties;
    }>;
    pagesPerRow: Ref<number>;
    targetScale: Ref<number>;
    isScaling: Ref<boolean>;
    onScaleRequest: (newScale: number, options?: {
        immediate?: boolean;
        origin?: [number, number];
    }) => Promise<void>;
    pageVisibleAreas: Ref<Map<number, VisibleArea>>;
    currentPageIndex: Ref<number>;
    /**
     * The focused page number (1-indexed) adjusted for view mode.
     * Handles DualPage and DualPageWithCover offsets automatically.
     * Use this instead of currentPageIndex for UI display.
     */
    focusedPageNumber: ComputedRef<number>;
    /**
     * True during programmatic scroll (scrollTo).
     * Used to prevent scroll events from updating focusedPageNumber
     * until the scroll animation settles.
     */
    isScrollSettling: Ref<boolean>;
}
interface UseVirtualPagesProps {
    pages: Ref<ViewerPdfPage[]>;
    actualPdfPages: Ref<ViewerPdfPage[]>;
    viewerRef: Ref<HTMLElement | undefined>;
    scrollMode: Ref<ScrollMode>;
    viewMode: Ref<ViewMode>;
    isRtl: boolean;
    smoothScroll: Ref<boolean>;
    currentScale: Ref<number>;
    pdfDocument: Ref<PDFDocumentProxy | undefined>;
    initialScale: MaybeRef<number | ZoomLevel>;
    cancelAllRenders?: () => void;
    reprioritizeCurrentPage?: () => void;
    pageRotationMap?: Ref<Map<number, number>>;
}
/**
 * Composable for virtual scrolling of PDF pages with support for multiple view modes.
 *
 * Implements efficient virtual scrolling by only rendering pages in the viewport plus overscan.
 * Supports smooth CSS-based zooming with atomic canvas swapping to prevent flashing.
 *
 * Features:
 * - Virtual scrolling with configurable overscan
 * - Multiple scroll modes: vertical, horizontal, wrapped, page
 * - Multiple view modes: single, dual page, dual page with cover
 * - Smooth zoom with CSS transform bridge and debounced re-render
 * - Maintains scroll position during zoom operations
 * - Dual page grouping for proper layout
 *
 * @param props - Configuration for virtual pages including pages, scroll mode, view mode
 * @returns Virtual list utilities including list, scrollTo, containerProps, wrapperProps, and zoom controls
 */
declare function useVirtualPages(props: UnwrapRef<UseVirtualPagesProps>): UseVirtualListReturn;
export default useVirtualPages;
