@vue-pdf-viewer/viewer
Version:
A vue-pdf-viewer component for Vue and Nuxt. Suitable for vue-pdf document.
64 lines (63 loc) • 2.55 kB
TypeScript
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>;
}
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;
}
/**
* 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;