UNPKG

@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
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;