Layout Blocks
retab-ui/layout-blocksFreeComponent
A provider-agnostic layout inspection component for OCR output: normalize Google Document AI, AWS Textract, or Azure Document Intelligence into shared blocks, lines, and words, then review them over the source page with virtualized rows, confidence filtering, and precise overlays.
Install it
npx shadcn@latest add https://ui.retab.com/r/layout-blocks.jsonSource
1"use client";23import * as React from "react";45import { cn } from "@/lib/utils";6import {7 FileViewer,8 FileViewerContent,9 FileViewerProvider,10 FileViewerInset,11 FileViewerSidebar,12 FileViewerSidebarTrigger,13 FileViewerViewport,14} from "@/components/ui/file-viewer";15import {16 PdfViewerPages,17 PdfViewerProvider,18 type PdfDocumentSource,19 type PdfViewerHandle,20} from "@/components/ui/pdf-viewer";21import {22 SegmentedDocumentProvider,23 useSegmentedDocumentViewport,24} from "@/components/ui/segmented-document-provider";25import { useSegmentedItemLink } from "@/components/ui/segmented-item-link";26import {27 ViewerHeader,28 ViewerRoot,29 ViewerSidebarTrigger,30} from "@/components/ui/viewer";3132import {33 azureToLayoutDocument,34 type AzureDocument,35} from "./layout-blocks-azure";36import {37 documentAiPageImages,38 documentAiToLayoutDocument,39 type DocumentAiDocument,40} from "./layout-blocks-document-ai";41import { createLayoutBlocksViewerModel } from "./layout-blocks-model";42import { LayoutBlocksPanel } from "./layout-blocks-panel";43import { layoutDocumentToPdfBlob } from "./layout-blocks-pdf";44import { createOcrSegmentedDocumentModel } from "./layout-blocks-segmented-document-model";45import {46 textractToLayoutDocument,47 type TextractDocument,48} from "./layout-blocks-textract";49import type { LayoutDocument, LayoutLevel } from "./layout-blocks-types";50import { LayoutOverlayLayer } from "./layout-overlay-layer";51import { useKeyedMountEffect } from "@/hooks/use-keyed-mount-effect";52import { joinEffectKey } from "@/lib/effect-key";5354const LOW_CONFIDENCE_THRESHOLD = 0.9;55const LEVEL_ORDER: LayoutLevel[] = ["block", "paragraph", "line", "word"];56const EMPTY_PAGE_IMAGES: ReadonlyMap<number, string> = new Map();5758/**59 * Discriminated source for the OCR viewer. Each provider's raw output is60 * normalized to a shared {@link LayoutDocument} before rendering, so the viewer61 * itself is provider-agnostic.62 */63export type OcrSource =64 | {65 provider: "google-document-ai";66 output: DocumentAiDocument;67 pageImages?: ReadonlyMap<number, string>;68 }69 | {70 provider: "aws-textract";71 output: TextractDocument;72 pageImages?: ReadonlyMap<number, string>;73 }74 | {75 provider: "azure-document-intelligence";76 output: AzureDocument;77 pageImages?: ReadonlyMap<number, string>;78 };7980export function OcrLayoutBlocks({81 className,82 heightClassName = "h-[680px]",83 source,84}: {85 className?: string;86 heightClassName?: string;87// … truncated
What it pulls in
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 |
