jagran-react-doc-viewer
Version:
A highly customizable React document viewer with support for PDF, DOCX, PPTX, images, and more
209 lines • 5.88 kB
TypeScript
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