'use client'; import { useEffect, useRef, useState } from 'react'; import { Loader } from 'lucide-react'; import { Document as PDFDocument, Page as PDFPage, pdfjs } from 'react-pdf'; import 'react-pdf/dist/esm/Page/AnnotationLayer.css'; import 'react-pdf/dist/esm/Page/TextLayer.css'; import { cn } from '@documenso/ui/lib/utils'; type LoadedPDFDocument = pdfjs.PDFDocumentProxy; pdfjs.GlobalWorkerOptions.workerSrc = new URL( 'pdfjs-dist/build/pdf.worker.min.js', import.meta.url, ).toString(); export type PDFViewerProps = { className?: string; document: string; [key: string]: unknown; }; export const PDFViewer = ({ className, document, ...props }: PDFViewerProps) => { const $el = useRef(null); const [width, setWidth] = useState(0); const [numPages, setNumPages] = useState(0); const onDocumentLoaded = (doc: LoadedPDFDocument) => { setNumPages(doc.numPages); }; useEffect(() => { if ($el.current) { const $current = $el.current; const { width } = $current.getBoundingClientRect(); setWidth(width); const onResize = () => { const { width } = $current.getBoundingClientRect(); setWidth(width); }; window.addEventListener('resize', onResize); return () => { window.removeEventListener('resize', onResize); }; } }, []); return (
onDocumentLoaded(d)} externalLinkTarget="_blank" loading={

Loading document...

} > {Array(numPages) .fill(null) .map((_, i) => (
))}
); }; export default PDFViewer;