DOCX Viewer
retab-ui/docx-viewerFreeComponent
A docx-preview-backed Word viewer: faithful paginated pages, continuous scroll, zoom, fit-to-width, and download. Off-screen pages are skipped via CSS content-visibility.
Install it
npx shadcn@latest add https://ui.retab.com/r/docx-viewer.jsonSource
1"use client";23import * as React from "react";45import { clearDocxDocumentResource } from "@/lib/docx-document-resource";6import { isResourceError, isViewerFormatError } from "@/lib/viewer-errors";7import {8 createViewerResource,9 type ViewerResource,10} from "@/lib/viewer-resource";11import { useIsClient } from "@/components/ui/use-is-client";12import { ViewerErrorBoundary } from "@/components/ui/viewer-error";1314import { DocxViewerFallback } from "./docx-viewer-chrome";15import { DocxViewerContent } from "./docx-viewer-content";16import type {17 DocxResourceContentProps,18 DocxViewerHandle,19 DocxViewerProps,20} from "./docx-viewer-types";2122export type {23 DocxDocumentSource,24 DocxResourceContentProps,25 DocxTarget,26 DocxViewerHandle,27 DocxViewerProps,28} from "./docx-viewer-types";2930export type DocxViewerProviderProps = {31 children: React.ReactNode;32 resource: ViewerResource;33};3435export type DocxViewerDocumentProps = Omit<36 DocxResourceContentProps,37 "resource"38>;3940export const DocxViewer = React.forwardRef<DocxViewerHandle, DocxViewerProps>(41 function DocxViewer(props, ref) {42 const { source, ...resourceProps } = props;43 const resource = React.useMemo(44 () => createViewerResource(source),45 [source],46 );47 return (48 <DocxResourceContent {...resourceProps} ref={ref} resource={resource} />49 );50 },51);5253const DocxViewerResourceContext = React.createContext<ViewerResource | null>(54 null,55);5657export function DocxViewerProvider({58 children,59 resource,60}: DocxViewerProviderProps) {61 return (62 <DocxViewerResourceContext.Provider value={resource}>63 {children}64 </DocxViewerResourceContext.Provider>65 );66}6768function useDocxViewerResource(): ViewerResource {69 const resource = React.useContext(DocxViewerResourceContext);70 if (!resource) {71 throw new Error(72 "DocxViewerDocument must be used within DocxViewerProvider.",73 );74 }75 return resource;76}7778export const DocxViewerDocument = React.forwardRef<79 DocxViewerHandle,80 DocxViewerDocumentProps81>(function DocxViewerDocument(props, ref) {82 const resource = useDocxViewerResource();83 return <DocxResourceContent {...props} ref={ref} resource={resource} />;84});8586export const DocxResourceContent = React.forwardRef<87 DocxViewerHandle,88 DocxResourceContentProps89>(function DocxResourceContent(props, ref) {90 const isClient = useIsClient();91 const resource = props.resource;92 if (!isClient) {93 return (94 <DocxViewerFallback95 bare={props.bare}96// … 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 |
