import { ReactNode, ComponentType } from 'react';
export interface DocumentSource {
    uri: string;
    fileName?: string;
    fileType?: string;
    startPage?: number;
    thumbnail?: string;
}
export interface ViewerTheme {
    primary?: string;
    secondary?: string;
    background?: string;
    surface?: string;
    text?: string;
    textSecondary?: string;
    border?: string;
    error?: string;
    success?: string;
}
export interface HeaderConfig {
    visible?: boolean;
    customContent?: ReactNode;
    height?: string;
    style?: React.CSSProperties;
    className?: string;
}
export interface NavigationConfig {
    visible?: boolean;
    position?: 'top' | 'bottom' | 'left' | 'right';
    style?: React.CSSProperties;
    className?: string;
    customPrevButton?: ReactNode;
    customNextButton?: ReactNode;
    customPageIndicator?: ReactNode;
    showThumbnails?: boolean;
    thumbnailSize?: {
        width: number;
        height: number;
    };
    icons?: {
        prev?: ReactNode;
        next?: ReactNode;
        download?: ReactNode;
        print?: ReactNode;
        fullscreen?: ReactNode;
        zoomIn?: ReactNode;
        zoomOut?: ReactNode;
        zoomReset?: ReactNode;
    };
}
export interface PrerenderConfig {
    enabled?: boolean;
    threshold?: number;
    strategy?: 'next' | 'all';
}
export interface ViewerConfig {
    theme?: 'light' | 'dark' | ViewerTheme;
    showToolbar?: boolean;
    showNavigation?: boolean;
    allowDownload?: boolean;
    allowPrint?: boolean;
    allowFullscreen?: boolean;
    loadingTimeout?: number;
    errorRetryAttempts?: number;
    header?: HeaderConfig;
    navigation?: NavigationConfig;
    prerender?: PrerenderConfig;
    customToolbar?: React.ReactNode;
    customNavigation?: React.ReactNode;
    customActions?: React.ReactNode;
    toolbarPosition?: 'top' | 'bottom' | 'left' | 'right';
    navigationPosition?: 'top' | 'bottom' | 'left' | 'right';
    renderFromPage?: boolean;
    showThumbnail?: boolean;
    thumbnailSize?: {
        width: number;
        height: number;
    };
    tooltips?: {
        download?: string;
        zoom?: {
            in?: string;
            out?: string;
            reset?: string;
            current?: string;
        };
        navigation?: {
            previous?: string;
            next?: string;
            pageInfo?: string;
        };
        toolbar?: {
            download?: string;
            print?: string;
            fullscreen?: string;
            customActions?: Record<string, string>;
        };
        error?: {
            retry?: string;
            generic?: string;
        };
    };
    pageGap?: number;
    pagePadding?: number;
    initialZoom?: number;
    initialZoomByDevice?: {
        mobile?: number;
        tablet?: number;
        ipad?: number;
        desktop?: number;
        tv?: number;
    };
    zoomStep?: number;
    minZoom?: number;
    maxZoom?: number;
    mobileBreakpoint?: number;
    tabletBreakpoint?: number;
    mobileBehavior?: {
        collapseToolbar?: boolean;
        hideNavigation?: boolean;
        simplifiedControls?: boolean;
    };
    toolbarClassName?: string;
    navigationClassName?: string;
    contentClassName?: string;
    animatePageTransition?: boolean;
    transitionDuration?: number;
    zoomAnimationDuration?: number;
}
export interface ViewerEvents {
    onDocumentLoad?: (document: DocumentSource) => void;
    onDocumentError?: (error: Error, document: DocumentSource) => void;
    onPageChange?: (page: number, totalPages: number) => void;
    onZoomChange?: (zoom: number) => void;
    onFullscreenToggle?: (isFullscreen: boolean) => void;
}
export interface RendererProps {
    document: DocumentSource;
    config: ViewerConfig;
    events: ViewerEvents;
    className?: string;
    style?: React.CSSProperties;
    documents?: DocumentSource[];
    currentIndex?: number;
    externalZoom?: number;
    onZoomUpdate?: (zoom: number) => number;
    loading?: boolean;
    onLoadingChange?: (loading: boolean) => void;
    loadingCustomComponent?: ComponentType;
}
export interface CustomRenderer {
    fileTypes: string[];
    component: ComponentType<RendererProps>;
    priority?: number;
    handlesOwnZoom?: boolean;
}
export interface LoadingRendererProps {
    document: DocumentSource;
    fileName?: string;
    progress?: number;
}
export interface ErrorRendererProps {
    error: Error;
    document: DocumentSource;
    onRetry?: () => void;
}
export interface DocViewerProps {
    documents: DocumentSource[];
    activeDocument?: number;
    startIndex?: number;
    config?: ViewerConfig;
    events?: ViewerEvents;
    customRenderers?: CustomRenderer[];
    loadingRenderer?: ComponentType<LoadingRendererProps>;
    errorRenderer?: ComponentType<ErrorRendererProps>;
    className?: string;
    style?: React.CSSProperties;
    zoomLevel?: number;
    onZoomChange?: (zoomLevel: number) => number;
    allowScreenshot?: boolean;
    loading?: boolean;
    LoadingComponent?: ComponentType<LoadingRendererProps>;
    showThumbnail?: boolean;
    onLoadingChange?: (loading: boolean) => void;
    loadingCustomComponent?: ComponentType;
}
export interface DocViewerRef {
    nextDocument: () => void;
    previousDocument: () => void;
    setActiveDocument: (index: number) => void;
    getCurrentDocument: () => DocumentSource | null;
    reload: () => void;
    downloadCurrent: () => void;
    printCurrent: () => void;
    toggleFullscreen: () => void;
    incrementZoom: () => void;
    decrementZoom: () => void;
    resetZoom: () => void;
}
declare global {
    interface PromiseConstructor {
        withResolvers<T>(): {
            promise: Promise<T>;
            resolve: (value: T | PromiseLike<T>) => void;
            reject: (reason?: any) => void;
        };
    }
}
//# sourceMappingURL=index.d.ts.map