Intake Router
retab-ui/dropzone-intake-routerFreeBlock
One intake target routes selected files into document, image, and table lanes.
Install it
npx shadcn@latest add https://ui.retab.com/r/dropzone-intake-router.jsonSource
1"use client";23import { Upload, X } from "lucide-react";45import { cn } from "@/lib/utils";6import { useDropzone, type DropzoneFileItem } from "@/components/ui/dropzone";7import { FileThumbnail } from "@/components/ui/file-thumbnail";89import {10 RejectionRows,11 type DropzoneExampleProps,12} from "./dropzone-example-shared";1314export function IntakeRouter({ className }: DropzoneExampleProps) {15 const dropzone = useDropzone({16 accept:17 ".pdf,.doc,.docx,.csv,.xls,.xlsx,.png,.jpg,.jpeg,image/*,application/pdf,text/csv",18 maxFiles: 12,19 multiple: true,20 });21 const groups = getRoutedFiles(dropzone.files);2223 return (24 <section25 {...dropzone.getRootProps({26 className: cn(27 "rounded-lg border bg-background p-4 transition-colors",28 dropzone.isDragging && "border-foreground/40 bg-accent/35",29 className,30 ),31 })}32 >33 <input {...dropzone.getInputProps({ className: "hidden" })} />34 <div className="mb-4 flex flex-wrap items-center justify-between gap-3">35 <div>36 <div className="text-sm font-medium">Intake router</div>37 <div className="text-muted-foreground mt-1 text-xs">38 One target, derived lanes by file type.39 </div>40 </div>41 <button42 {...dropzone.getTriggerProps({43 native: true,44 className:45 "inline-flex h-8 cursor-pointer items-center gap-2 rounded-md border bg-background px-3 text-xs font-medium outline-none hover:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/24",46 })}47 >48 <Upload className="size-3.5" aria-hidden />49 Add batch50 </button>51 </div>52 <div className="grid gap-3 md:grid-cols-3">53 <RoutedLane54 label="Documents"55 files={groups.documents}56 onRemove={dropzone.removeFile}57 />58 <RoutedLane59 label="Images"60 files={groups.images}61 onRemove={dropzone.removeFile}62 />63 <RoutedLane64 label="Tables"65 files={groups.tables}66 onRemove={dropzone.removeFile}67 />68 </div>69 <RejectionRows rejections={dropzone.lastIntake.fileRejections} />70 </section>71 );72}7374function getRoutedFiles(files: DropzoneFileItem[]) {75 const groups = {76 documents: [] as DropzoneFileItem[],77 images: [] as DropzoneFileItem[],78 tables: [] as DropzoneFileItem[],79 };8081 for (const item of files) {82// … 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 |
|---|---|---|---|---|---|
| Classify Consensusclassify-consensus-viewer-block | retab-ui | Blocks | Free | 1 dep · 4 files | |
| CSV Sourcescsv-sources-block | retab-ui | Blocks | Free | no deps · 2 files | |
| DOCX Sourcesdocx-sources-block | retab-ui | Blocks | Free | no deps · 2 files | |
| Avatar Image Slotdropzone-avatar-image-slot | retab-ui | Blocks | Free | 1 dep · 2 files | |
| Dropzonedropzone-block | retab-ui | Blocks | Free | 1 dep · 26 files | |
| Comparison Pairdropzone-comparison-pair-upload | retab-ui | Blocks | Free | 1 dep · 2 files | |
| Controlled Queuedropzone-controlled-queue | retab-ui | Blocks | Free | 1 dep · 2 files | |
| Custom Thumbnail Griddropzone-custom-thumbnail-grid | retab-ui | Blocks | Free | 1 dep · 2 files |
