PDF Viewer
retab-ui/pdf-viewerFreeComponent
A pdfjs-backed PDF viewer: continuous scroll, controlled or uncontrolled zoom, rotate, fit-to-width, download, a per-page overlay slot for bounding-box citations, a PdfHighlight overlay, and imperative scrollToPage / scrollToPageArea handles for driving source highlights.
Install it
npx shadcn@latest add https://ui.retab.com/r/pdf-viewer.jsonSource
1"use client";23import * as React from "react";45import { cn } from "@/lib/utils";67import {8 FileViewer,9 FileViewerContent,10 FileViewerHeader,11 FileViewerControls,12 FileViewerTitle,13 FileViewerInset,14 FileViewerProvider,15 FileViewerViewport,16} from "./file-viewer";17import {18 PdfResourceContent,19 type PdfResourceContentProps,20 type PdfViewerContentProps,21} from "./pdf-viewer-content";22import {23 PdfViewerPages,24 PdfViewerProvider,25 type PdfDocumentSource,26} from "./pdf-viewer-context";27import type { PdfViewerHandle } from "./pdf-viewer-types";2829export type {30 PageOverlayProps,31 PdfPageAreaTarget,32 PdfPageRenderSource,33 PdfPageRenderStatus,34 PdfPageRenderTiming,35 PdfViewerHandle,36 PdfViewerPerformanceOptions,37} from "./pdf-viewer-types";38export {39 PdfViewerPages,40 PdfViewerProvider,41 usePdfViewerThumbnails,42 type PdfDocumentSource,43} from "./pdf-viewer-context";44export {45 PdfResourceContent,46 type PdfResourceContentProps,47 type PdfViewerContentProps,48} from "./pdf-viewer-content";49export {50 PdfThumbnailRail,51 PdfViewerThumbnails,52 type PdfThumbnailRailProps,53 type PdfViewerThumbnailsProps,54} from "./pdf-viewer-thumbnails";5556export interface PdfHighlightProps extends React.ComponentProps<"div"> {57 /** Normalized box, each field a percentage [0, 100] of the page. */58 area: { left: number; top: number; width: number; height: number };59}6061export function PdfHighlight({62 area,63 className,64 style,65 ...props66}: PdfHighlightProps) {67 return (68 <div69 data-slot="pdf-highlight"70 className={cn(71 "border-primary/70 bg-primary/12 pointer-events-none absolute z-10 rounded-[2px] border shadow-[0_4px_16px_rgb(0_0_0_/_8%)]",72 className,73 )}74 style={{75 left: `${area.left}%`,76 top: `${area.top}%`,77 width: `${area.width}%`,78 height: `${area.height}%`,79 ...style,80 }}81 {...props}82 />83 );84}8586export interface PdfViewerProps extends PdfViewerContentProps {87 /** Canonical PDF source. URL sources preserve PDF.js range-loading behavior. */88 source: PdfDocumentSource;89}9091export const PdfViewer = React.forwardRef<PdfViewerHandle, PdfViewerProps>(92 function PdfViewer(props, ref) {93 const {94 source,95 className,96 bare = false,97 controls = true,98 download = true,99 ...pagesProps100 } = props;101 return (102 <FileViewerProvider source={source}>103 <FileViewer104 className={cn(105 "h-full",106// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from retab-ui
All 130 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Alertalert | retab-ui | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | retab-ui | Components | Free | 1 dep | |
| Aspect Ratioaspect-ratio | retab-ui | Components | Free | no deps | |
| Attachment Sidebarattachment-sidebar | retab-ui | Components | Free | 1 dep | |
| Autocompleteautocomplete | retab-ui | Components | Free | 2 deps | |
| Calendarcalendar | retab-ui | Components | Free | 2 deps | |
| Code Viewercode-viewer | retab-ui | Components | Free | 2 deps · 32 files | |
| Commandcommand | retab-ui | Components | Free | 2 deps |
