{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "retab-ui",
  "homepage": "https://ui.retab.com",
  "items": [
    {
      "name": "viewer-controls",
      "type": "registry:ui",
      "title": "Viewer Controls",
      "description": "A shared controls row for viewer chrome: title, position, zoom, rotate, download, loading, and extra controls.",
      "dependencies": [
        "lucide-react@^0.514.0",
        "class-variance-authority@^0.7.1",
        "radix-ui@^1.5.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "button",
        "separator",
        "@retab/skeleton",
        "@retab/spinner",
        "dropdown-menu",
        "@retab/effect-key",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/viewer-controls.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-controls.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/ui/button.tsx",
          "type": "registry:ui",
          "target": "@ui/button.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/dropdown-menu.tsx",
          "type": "registry:ui",
          "target": "@ui/dropdown-menu.tsx"
        }
      ]
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Utils",
      "description": "Shared class name helper used by Retab UI registry components.",
      "dependencies": [
        "clsx@^2.1.1",
        "tailwind-merge@^2.5.5"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/lib/utils.ts",
          "type": "registry:lib",
          "target": "@lib/utils.ts"
        }
      ]
    },
    {
      "name": "effect-key",
      "type": "registry:lib",
      "title": "Effect Key",
      "description": "Dependency-array key helpers for keyed effect lifecycles.",
      "files": [
        {
          "path": "lib/effect-key.ts",
          "type": "registry:lib",
          "target": "@lib/effect-key.ts"
        }
      ]
    },
    {
      "name": "use-mobile",
      "type": "registry:hook",
      "title": "Use Mobile",
      "description": "A media query hook for mobile responsive UI.",
      "files": [
        {
          "path": "registry/new-york-v4/hooks/use-mobile.ts",
          "type": "registry:hook",
          "target": "@hooks/use-mobile.ts"
        }
      ],
      "registryDependencies": [
        "@retab/use-mount-effect"
      ]
    },
    {
      "name": "use-mount-effect",
      "type": "registry:hook",
      "title": "Use Mount Effect",
      "description": "A mount-only effect hook for explicit lifecycle escape hatches.",
      "files": [
        {
          "path": "hooks/use-mount-effect.ts",
          "type": "registry:hook",
          "target": "@hooks/use-mount-effect.ts"
        }
      ]
    },
    {
      "name": "use-keyed-mount-effect",
      "type": "registry:hook",
      "title": "Use Keyed Mount Effect",
      "description": "A key-driven post-commit effect hook for library internals.",
      "files": [
        {
          "path": "hooks/use-keyed-mount-effect.ts",
          "type": "registry:hook",
          "target": "@hooks/use-keyed-mount-effect.ts"
        }
      ]
    },
    {
      "name": "use-keyed-layout-effect",
      "type": "registry:hook",
      "title": "Use Keyed Layout Effect",
      "description": "A key-driven layout-timed effect hook for DOM measurement and scroll/focus lifecycles.",
      "files": [
        {
          "path": "hooks/use-keyed-layout-effect.ts",
          "type": "registry:hook",
          "target": "@hooks/use-keyed-layout-effect.ts"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "A callout for displaying contextual messages.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/alert.tsx",
          "type": "registry:ui",
          "target": "@ui/alert.tsx"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Alert Dialog",
      "description": "A modal alert dialog for destructive confirmations and blocking decisions.",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "button",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/alert-dialog.tsx",
          "type": "registry:ui",
          "target": "@ui/alert-dialog.tsx"
        }
      ]
    },
    {
      "name": "aspect-ratio",
      "type": "registry:ui",
      "title": "Aspect Ratio",
      "description": "A small wrapper for preserving media aspect ratios.",
      "files": [
        {
          "path": "registry/new-york-v4/ui/aspect-ratio.tsx",
          "type": "registry:ui",
          "target": "@ui/aspect-ratio.tsx"
        }
      ]
    },
    {
      "name": "autocomplete",
      "type": "registry:ui",
      "title": "Autocomplete",
      "description": "An autocomplete input built on Base UI primitives.",
      "dependencies": [
        "@base-ui/react@^1.4.1",
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/input",
        "@retab/scroll-area",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/autocomplete.tsx",
          "type": "registry:ui",
          "target": "@ui/autocomplete.tsx"
        }
      ]
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "A command menu surface powered by cmdk.",
      "dependencies": [
        "cmdk@^1.1.1",
        "lucide-react"
      ],
      "registryDependencies": [
        "dialog",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/command.tsx",
          "type": "registry:ui",
          "target": "@ui/command.tsx"
        }
      ]
    },
    {
      "name": "dropzone",
      "type": "registry:ui",
      "title": "Dropzone",
      "description": "A headless file-intake primitive with drag/drop, file input wiring, validation, controlled state, and accessibility prop getters.",
      "files": [
        {
          "path": "registry/new-york-v4/ui/dropzone.tsx",
          "type": "registry:ui",
          "target": "@ui/dropzone.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/dropzone-core.ts",
          "type": "registry:ui",
          "target": "@ui/dropzone-core.ts"
        }
      ],
      "registryDependencies": [
        "@retab/use-keyed-mount-effect"
      ],
      "dependencies": [
        "@radix-ui/react-slot@^1.1.1"
      ]
    },
    {
      "name": "file-uploader",
      "type": "registry:ui",
      "title": "File Uploader",
      "description": "A polished Retab document upload area built from the headless Dropzone primitive and File Thumbnail.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-uploader.tsx",
          "type": "registry:ui",
          "target": "@ui/file-uploader.tsx"
        }
      ]
    },
    {
      "name": "file-size-format",
      "type": "registry:ui",
      "title": "File Size Format",
      "description": "A small byte-size display formatter for file UI components.",
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-size-format.ts",
          "type": "registry:ui",
          "target": "@ui/file-size-format.ts"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "A styled text input built on Base UI.",
      "dependencies": [
        "@base-ui/react@^1.4.1"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/input.tsx",
          "type": "registry:ui",
          "target": "@ui/input.tsx"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "An accessible label primitive.",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/label.tsx",
          "type": "registry:ui",
          "target": "@ui/label.tsx"
        }
      ]
    },
    {
      "name": "form",
      "type": "registry:ui",
      "title": "Form",
      "description": "React Hook Form field primitives with accessible labels, descriptions, and messages.",
      "dependencies": [
        "radix-ui",
        "react-hook-form"
      ],
      "registryDependencies": [
        "@retab/label",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/form.tsx",
          "type": "registry:ui",
          "target": "@ui/form.tsx"
        }
      ]
    },
    {
      "name": "data-cell",
      "type": "registry:ui",
      "title": "Data Cell",
      "description": "A lightweight editable cell for scalar document data: text, numbers, booleans, dates, times, and date-times.",
      "registryDependencies": [
        "@retab/calendar",
        "@retab/input",
        "popover",
        "select",
        "@retab/utils",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/data-cell.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-activation.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-activation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-boolean-control.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-boolean-control.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-boolean-value.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-boolean-value.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-classes.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-classes.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-control.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-control.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-control-actions.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-control-actions.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-control-contract.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-control-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-control-props.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-control-props.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-control-registry.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-control-registry.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-display.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-display.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-display-model.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-display-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-edit-model.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-edit-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-format.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-format.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-picker-control.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-picker-control.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-picker-icon.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-picker-icon.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-picker-position.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-picker-position.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-activation.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-activation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-control.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-control.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-keyboard.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-keyboard.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-navigation.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-navigation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-popup-dismissal.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-popup-dismissal.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-popup-position.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-popup-position.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-popup.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-popup.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-select-state.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-select-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-session.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-session.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-input-control.tsx",
          "type": "registry:ui",
          "target": "@ui/data-cell-input-control.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-text-activation.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-text-activation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-text-hit-test.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-text-hit-test.ts"
        },
        {
          "path": "registry/new-york-v4/ui/data-cell-types.ts",
          "type": "registry:ui",
          "target": "@ui/data-cell-types.ts"
        }
      ],
      "dependencies": [
        "@chenglou/pretext@^0.0.8",
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "A calendar component built on React DayPicker.",
      "dependencies": [
        "lucide-react",
        "react-day-picker@^9.4.4"
      ],
      "registryDependencies": [
        "button",
        "@retab/utils",
        "@retab/effect-key",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/calendar.tsx",
          "type": "registry:ui",
          "target": "@ui/calendar.tsx"
        }
      ]
    },
    {
      "name": "group",
      "type": "registry:ui",
      "title": "Group",
      "description": "A connected control group primitive for buttons, inputs, separators, and text addons.",
      "dependencies": [
        "@base-ui/react@^1.4.1",
        "class-variance-authority@^0.7.1"
      ],
      "registryDependencies": [
        "separator",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "components/ui/group.tsx",
          "type": "registry:ui",
          "target": "@ui/group.tsx"
        }
      ]
    },
    {
      "name": "json-inspector",
      "type": "registry:ui",
      "title": "JSON Inspector",
      "description": "A read-only JSON viewer with theme-aware syntax highlighting and a hover copy button, plus a standalone CopyButton.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/scroll-area",
        "@retab/utils",
        "@retab/effect-key",
        "@retab/use-keyed-layout-effect",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/json-inspector.tsx",
          "type": "registry:ui",
          "target": "@ui/json-inspector.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/json-inspector-highlight.ts",
          "type": "registry:ui",
          "target": "@ui/json-inspector-highlight.ts"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "description": "A keyboard shortcut display primitive.",
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/kbd.tsx",
          "type": "registry:ui",
          "target": "@ui/kbd.tsx"
        }
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Scroll Area",
      "description": "A custom scroll area built on Base UI.",
      "dependencies": [
        "@base-ui/react@^1.4.1"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/scroll-area.tsx",
          "type": "registry:ui",
          "target": "@ui/scroll-area.tsx"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "A two-state toggle switch.",
      "dependencies": [
        "radix-ui"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/switch.tsx",
          "type": "registry:ui",
          "target": "@ui/switch.tsx"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Semantic table primitives for structured data.",
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/table.tsx",
          "type": "registry:ui",
          "target": "@ui/table.tsx"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "A styled multiline text input.",
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/textarea.tsx",
          "type": "registry:ui",
          "target": "@ui/textarea.tsx"
        }
      ]
    },
    {
      "name": "sidebar-row",
      "type": "registry:ui",
      "title": "Sidebar Row",
      "description": "Shared sidebar row button styling variants used by app and providerless sidebar primitives.",
      "dependencies": [
        "class-variance-authority@^0.7.1"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/sidebar-row.ts",
          "type": "registry:ui",
          "target": "@ui/sidebar-row.ts"
        }
      ]
    },
    {
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "A responsive application sidebar with menu, rail, and provider primitives.",
      "dependencies": [
        "@base-ui/react@^1.4.1",
        "lucide-react",
        "class-variance-authority@^0.7.1",
        "radix-ui@^1.5.0"
      ],
      "registryDependencies": [
        "button",
        "@retab/input",
        "@retab/scroll-area",
        "separator",
        "@retab/sidebar-row",
        "@retab/skeleton",
        "@retab/use-mobile",
        "@retab/utils",
        "sheet",
        "tooltip",
        "@retab/effect-key",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/sidebar.tsx",
          "type": "registry:ui",
          "target": "@ui/sidebar.tsx"
        },
        {
          "path": "hooks/use-media-query.ts",
          "type": "registry:hook",
          "target": "@hooks/use-media-query.ts"
        }
      ]
    },
    {
      "name": "sidebar-list",
      "type": "registry:ui",
      "title": "Sidebar List",
      "description": "Providerless sidebar list primitives for embedded viewer and domain sidebars.",
      "dependencies": [
        "@base-ui/react@^1.4.1"
      ],
      "registryDependencies": [
        "separator",
        "@retab/sidebar-row",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/sidebar-list.tsx",
          "type": "registry:ui",
          "target": "@ui/sidebar-list.tsx"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "A loading placeholder with shimmer animation.",
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/skeleton.tsx",
          "type": "registry:ui",
          "target": "@ui/skeleton.tsx"
        }
      ]
    },
    {
      "name": "sonner",
      "type": "registry:ui",
      "title": "Sonner",
      "description": "A themed toast provider for Sonner.",
      "dependencies": [
        "lucide-react",
        "next-themes@0.4.6",
        "sonner@^2.0.0"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/sonner.tsx",
          "type": "registry:ui",
          "target": "@ui/sonner.tsx"
        }
      ]
    },
    {
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "A compact loading spinner using Lucide.",
      "dependencies": [
        "lucide-react@^0.514.0"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/spinner.tsx",
          "type": "registry:ui",
          "target": "@ui/spinner.tsx"
        }
      ]
    },
    {
      "name": "resizable",
      "type": "registry:ui",
      "title": "Resizable",
      "description": "Resizable panel primitives using react-resizable-panels.",
      "dependencies": [
        "lucide-react",
        "react-resizable-panels@^4.11.2"
      ],
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "components/ui/resizable.tsx",
          "type": "registry:ui",
          "target": "@ui/resizable.tsx"
        }
      ]
    },
    {
      "name": "csv",
      "type": "registry:lib",
      "title": "CSV parser",
      "description": "A small, dependency-free RFC 4180-ish CSV/TSV parser returning a header and rectangular rows.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/csv.ts",
          "type": "registry:lib",
          "target": "@lib/csv.ts"
        },
        {
          "path": "registry/new-york-v4/lib/csv-parser.ts",
          "type": "registry:lib",
          "target": "@lib/csv-parser.ts"
        },
        {
          "path": "registry/new-york-v4/lib/csv-normalizer.ts",
          "type": "registry:lib",
          "target": "@lib/csv-normalizer.ts"
        },
        {
          "path": "registry/new-york-v4/lib/csv-dialect.ts",
          "type": "registry:lib",
          "target": "@lib/csv-dialect.ts"
        }
      ]
    },
    {
      "name": "pdf-document-resource",
      "type": "registry:lib",
      "title": "PDF Document Resource",
      "description": "Load and cache PDF.js documents and pages without viewer chrome.",
      "dependencies": [
        "pdfjs-dist@5.4.296"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/lib/pdf-document-types.ts",
          "type": "registry:lib",
          "target": "@lib/pdf-document-types.ts"
        },
        {
          "path": "registry/new-york-v4/lib/pdf-document-resource.ts",
          "type": "registry:lib",
          "target": "@lib/pdf-document-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        }
      ]
    },
    {
      "name": "docx-document-resource",
      "type": "registry:lib",
      "title": "DOCX Document Resource",
      "description": "Load and cache DOCX bytes without viewer chrome.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/docx-document-resource.ts",
          "type": "registry:lib",
          "target": "@lib/docx-document-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        }
      ]
    },
    {
      "name": "csv-viewer",
      "type": "registry:ui",
      "title": "CSV Viewer",
      "description": "A fixed-window virtualized CSV/TSV table: sortable columns, sticky header, row numbers, horizontal scroll. Renders straight from raw rows (no table row model) so it stays flat in memory on huge files.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/csv",
        "@retab/utils",
        "button",
        "dropdown-menu",
        "@retab/viewer-controls",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/csv-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-download.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-download.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-grid.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-grid.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-row-patcher.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-row-patcher.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-cell-classes.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-cell-classes.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-row-store.ts",
          "type": "registry:ui",
          "target": "@ui/csv-row-store.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-sort.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-sort.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-sort-worker.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-sort-worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-sort.worker.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-sort.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-row-style.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-row-style.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-template.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-template.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-columns.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-columns.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-layout.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-selection.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-selection.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-viewport.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-viewport.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/header-aware-scrollbar.tsx",
          "type": "registry:ui",
          "target": "@ui/header-aware-scrollbar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-scrollbar-css.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-scrollbar-css.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-scrollbar.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-scrollbar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-resource.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-state.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-style-scope.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-style-scope.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-worker.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer.worker.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-row-window.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-row-window.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-native-find-index.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-native-find-index.tsx"
        }
      ]
    },
    {
      "name": "pdf-viewer",
      "type": "registry:ui",
      "title": "PDF Viewer",
      "description": "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.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-document-resource",
        "@retab/utils",
        "button",
        "@retab/scroll-area",
        "separator",
        "@retab/skeleton",
        "dropdown-menu",
        "@retab/spinner",
        "@retab/viewer-controls"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/pdf-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-document-controls.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-document-controls.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-document-layout.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-document-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-document-resource.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-document-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-document-runtime.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-document-runtime.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-pages-layer.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-pages-layer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-render-scheduler.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-render-scheduler.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-render-cache.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-render-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-page-metrics.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-page-metrics.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-zoom-motion.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-zoom-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-document-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-document-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-document-geometry.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-document-geometry.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-page-sizes.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-page-sizes.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-page.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-page.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-canvas.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-canvas.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-render-error.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-render-error.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-states.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-states.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-thumbnails.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-thumbnails.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-layout.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-document.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-document.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-page-metrics.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-page-metrics.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-window.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-window.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-thumbnail-rail-follow.ts",
          "type": "registry:ui",
          "target": "@ui/use-thumbnail-rail-follow.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-rail.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-rail.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-item.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-item.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-canvas.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-canvas.tsx"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-telemetry.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-telemetry.ts"
        }
      ]
    },
    {
      "name": "docx-viewer",
      "type": "registry:ui",
      "title": "DOCX Viewer",
      "description": "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.",
      "dependencies": [
        "lucide-react",
        "docx-preview"
      ],
      "registryDependencies": [
        "@retab/docx-document-resource",
        "@retab/utils",
        "button",
        "@retab/scroll-area",
        "separator",
        "@retab/skeleton",
        "dropdown-menu",
        "@retab/viewer-controls",
        "@retab/use-mount-effect",
        "@retab/use-keyed-layout-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/docx-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/docx-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-render.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-render.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-zoom-motion.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-zoom-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-targets.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-targets.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-highlight.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-highlight.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-render-cache.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-render-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-lru-cache.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-lru-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        }
      ]
    },
    {
      "name": "image-viewer",
      "type": "registry:ui",
      "title": "Image Viewer",
      "description": "A performant image viewer with native off-thread decode (createImageBitmap), continuous scroll, zoom, rotate, fit-to-width, download, and a per-frame overlay slot. Renders multi-page TIFF scans efficiently: frames decode lazily near the viewport and decoded bitmaps are capped. No useEffect.",
      "dependencies": [
        "lucide-react",
        "utif@3.1.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "button",
        "@retab/scroll-area",
        "separator",
        "@retab/skeleton",
        "@retab/viewer-controls",
        "@retab/use-mount-effect",
        "@retab/use-keyed-layout-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/image-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/image-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/image-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/image-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-hooks.ts",
          "type": "registry:ui",
          "target": "@ui/image-viewer-hooks.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/image-viewer-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-zoom-motion.ts",
          "type": "registry:ui",
          "target": "@ui/image-viewer-zoom-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/image-viewer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/image-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/lib/image-geometry.ts",
          "type": "registry:lib",
          "target": "@lib/image-geometry.ts"
        },
        {
          "path": "registry/new-york-v4/lib/image-frame-source.ts",
          "type": "registry:lib",
          "target": "@lib/image-frame-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/image-source-cache.ts",
          "type": "registry:lib",
          "target": "@lib/image-source-cache.ts"
        },
        {
          "path": "registry/new-york-v4/lib/image-tiff-source.ts",
          "type": "registry:lib",
          "target": "@lib/image-tiff-source.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-viewer.worker.ts",
          "type": "registry:ui",
          "target": "@ui/image-viewer.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/utif.d.ts",
          "type": "registry:ui",
          "target": "@ui/utif.d.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-document-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-document-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-document-geometry.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-document-geometry.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-reading-fraction-rebase.ts",
          "type": "registry:ui",
          "target": "@ui/use-reading-fraction-rebase.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        }
      ]
    },
    {
      "name": "layout-blocks",
      "type": "registry:ui",
      "title": "Layout Blocks",
      "description": "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.",
      "registryDependencies": [
        "@retab/document-evidence",
        "@retab/file-viewer",
        "@retab/interactive-item-list",
        "@retab/pdf-viewer",
        "@retab/scroll-area",
        "@retab/segmented-document",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/layout-blocks.tsx",
          "type": "registry:ui",
          "target": "@ui/layout-blocks.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-types.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-document-ai.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-document-ai.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-document-ai-pdf.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-document-ai-pdf.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-textract.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-textract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-azure.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-azure.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-pdf.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-pdf.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-geometry.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-geometry.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-index.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-index.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-model.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-segmented-document-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/layout-overlay-layer.tsx",
          "type": "registry:ui",
          "target": "@ui/layout-overlay-layer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/layout-blocks-panel.tsx",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-panel.tsx"
        }
      ]
    },
    {
      "name": "pptx-viewer",
      "type": "registry:ui",
      "title": "PPTX Viewer",
      "description": "A canvas-backed PowerPoint viewer rendered entirely client-side (no server conversion): continuous scroll, zoom, rotate, fit-to-width, download, and a per-slide overlay slot. Slides render lazily near the viewport and renders are serialized.",
      "dependencies": [
        "lucide-react@^0.514.0",
        "pptxviewjs@1.1.9",
        "chart.js@^4.5.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "button",
        "@retab/scroll-area",
        "separator",
        "@retab/skeleton",
        "dropdown-menu",
        "@retab/viewer-controls",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/pptx-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-cache.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-lru-cache.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-lru-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-hooks.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-hooks.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-renderer.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-renderer.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-viewport.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-viewport.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-visible-slide.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-visible-slide.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-zoom-motion.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-zoom-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-zoom.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-zoom.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-source.ts",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-slide.tsx",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-slide.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pptx-viewer-fallback.tsx",
          "type": "registry:ui",
          "target": "@ui/pptx-viewer-fallback.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-reading-fraction-rebase.ts",
          "type": "registry:ui",
          "target": "@ui/use-reading-fraction-rebase.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        }
      ]
    },
    {
      "name": "xlsx-worker-protocol",
      "type": "registry:lib",
      "title": "XLSX worker protocol",
      "description": "Typed worker messages, parse limits, and error codes for the XLSX viewer.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/xlsx-worker-protocol.ts",
          "type": "registry:lib",
          "target": "@lib/xlsx-worker-protocol.ts"
        }
      ],
      "registryDependencies": [
        "@retab/xlsx-workbook"
      ]
    },
    {
      "name": "xlsx-workbook",
      "type": "registry:lib",
      "title": "XLSX workbook model",
      "description": "Sparse compact workbook helpers for the XLSX viewer: cell lookup, metadata projection, column labels, and bounded source caching.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/xlsx-workbook.ts",
          "type": "registry:lib",
          "target": "@lib/xlsx-workbook.ts"
        }
      ]
    },
    {
      "name": "xlsx-sheetjs-flattener",
      "type": "registry:lib",
      "title": "XLSX SheetJS flattener",
      "description": "Pure SheetJS-to-compact-sheet flattening helpers for the XLSX viewer worker.",
      "registryDependencies": [
        "@retab/xlsx-worker-protocol",
        "@retab/xlsx-workbook"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/lib/xlsx-sheetjs-flattener.ts",
          "type": "registry:lib",
          "target": "@lib/xlsx-sheetjs-flattener.ts"
        }
      ],
      "dependencies": [
        "@e965/xlsx@0.20.3"
      ]
    },
    {
      "name": "xlsx-viewer",
      "type": "registry:ui",
      "title": "XLSX Viewer",
      "description": "A fixed-window virtualized Excel/spreadsheet viewer rendered entirely client-side: sheet tabs, zoom, download, formatted values, numeric alignment, sparse workbook storage, and row + column virtualization so huge sheets stay smooth. No useEffect for data loading.",
      "dependencies": [
        "lucide-react",
        "@e965/xlsx@0.20.3"
      ],
      "registryDependencies": [
        "@retab/xlsx-worker-protocol",
        "@retab/xlsx-workbook",
        "@retab/xlsx-sheetjs-flattener",
        "@retab/utils",
        "button",
        "separator",
        "@retab/skeleton",
        "@retab/viewer-controls",
        "@retab/csv",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-resource.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-session.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-session.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-download.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-download.ts"
        },
        {
          "path": "registry/new-york-v4/ui/csv-viewer-download.ts",
          "type": "registry:ui",
          "target": "@ui/csv-viewer-download.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-grid.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-grid.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-row-style.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-row-style.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-template.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-template.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-columns.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-columns.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-layout.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-selection.ts",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-selection.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-viewport.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-viewport.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/header-aware-scrollbar.tsx",
          "type": "registry:ui",
          "target": "@ui/header-aware-scrollbar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-scrollbar-css.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-scrollbar-css.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-grid-constants.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-grid-constants.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-grid-row.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-grid-row.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-grid-scrollbar.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-grid-scrollbar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-grid-skeleton.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-grid-skeleton.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-sheet-tabs.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-sheet-tabs.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-shadow-scope.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-shadow-scope.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-scroll.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-scroll.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer.worker.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-sheet-state.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-sheet-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-active-cell.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-active-cell.ts"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-sheet.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-sheet.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/xlsx-viewer-row-patcher.ts",
          "type": "registry:ui",
          "target": "@ui/xlsx-viewer-row-patcher.ts"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-row-window.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-row-window.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/fixed-grid-native-find-index.tsx",
          "type": "registry:ui",
          "target": "@ui/fixed-grid-native-find-index.tsx"
        }
      ]
    },
    {
      "name": "file-viewer",
      "type": "registry:ui",
      "title": "File Viewer",
      "description": "One viewer for any file: detects the type and lazy-loads the matching renderer (PDF, DOCX, XLSX, PPTX, CSV, images) plus inline, virtualized text/code/JSON, Markdown (sandboxed), and HTML (sandboxed). Only the needed parser is ever downloaded.",
      "dependencies": [
        "lucide-react",
        "marked@18.0.5",
        "dompurify@3.4.9",
        "@radix-ui/react-slot@^1.1.1",
        "class-variance-authority@^0.7.1",
        "radix-ui@^1.5.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "button",
        "@retab/pdf-viewer",
        "@retab/docx-viewer",
        "@retab/image-viewer",
        "@retab/pptx-viewer",
        "@retab/xlsx-viewer",
        "@retab/csv-viewer",
        "@retab/code-viewer",
        "@retab/text-viewer-chenglou",
        "@retab/markdown-viewer",
        "@retab/viewer-controls",
        "@retab/skeleton",
        "separator",
        "@retab/spinner",
        "@retab/email-viewer"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-accessibility.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-accessibility.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-layout.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-layout.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-document.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-document.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fallback.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fallback.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-shell.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-shell.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-shell-controller.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-shell-controller.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-shell-keyboard.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-shell-keyboard.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-sidebar-controller.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-sidebar-controller.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-motion-telemetry.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-motion-telemetry.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-header.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-header.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-html-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-html-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-html-srcdoc-cache.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-html-srcdoc-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-preview.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-preview.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-provider.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-provider.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-resource-state.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-resource-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-route.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-route.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-prewarm.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-prewarm.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-state.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-state.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-sidebar.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-sidebar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-text-resource.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-text-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-body.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-body.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-diagnostics.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-diagnostics.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-header-outlet.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-header-outlet.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-internals.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-internals.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-root.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-root.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-sidebar.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-sidebar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-surface.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-surface.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-zoom.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-zoom.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-abortable-request.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-abortable-request.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-lru-cache.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-lru-cache.ts"
        },
        {
          "path": "registry/new-york-v4/lib/pdf-viewer-diagnostics.ts",
          "type": "registry:lib",
          "target": "@lib/pdf-viewer-diagnostics.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        }
      ]
    },
    {
      "name": "file-system",
      "type": "registry:ui",
      "title": "File System",
      "description": "A document workspace over a flat object-store manifest with list, grid, columns, lazy folders, generated thumbnails, and FileViewer previews.",
      "dependencies": [
        "lucide-react",
        "@pierre/trees@1.0.0-beta.4"
      ],
      "registryDependencies": [
        "@retab/utils",
        "breadcrumb",
        "button",
        "dialog",
        "@retab/file-size-format",
        "@retab/file-thumbnail",
        "@retab/file-viewer",
        "@retab/input",
        "@retab/scroll-area",
        "@retab/spinner",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-system.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-provider.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-provider.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-parts.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-parts.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-browser-state.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-browser-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-browser-controller.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-browser-controller.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-kernel-runtime.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-kernel-runtime.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-kernel-command-effects.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-kernel-command-effects.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-async-task.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-async-task.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-folder-task.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-folder-task.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-controlled-props.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-controlled-props.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-kernel-selectors.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-kernel-selectors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-selection-source-task.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-selection-source-task.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-open-source-task.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-open-source-task.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-open-preview-state.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-open-preview-state.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-open-preview-dialog.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-open-preview-dialog.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-types.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-index.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-index.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-query.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-query.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-source-controller.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-source-controller.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-controls.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-controls.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-navigation.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-navigation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-file-system-roving-focus.ts",
          "type": "registry:ui",
          "target": "@ui/use-file-system-roving-focus.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-thumbnail.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-thumbnail.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-list-view.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-list-view.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-grid-view.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-grid-view.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-columns-view.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-columns-view.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-utils.ts",
          "type": "registry:ui",
          "target": "@ui/file-system-utils.ts"
        }
      ]
    },
    {
      "name": "file-system-light",
      "type": "registry:ui",
      "title": "File System Light",
      "description": "A minimal file tree in a ViewerSidebar with FileViewer in the ViewerSurface.",
      "dependencies": [
        "@pierre/trees",
        "lucide-react@^0.460.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "breadcrumb",
        "@retab/file-viewer"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-system-light.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-light.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-system-light-tree.tsx",
          "type": "registry:ui",
          "target": "@ui/file-system-light-tree.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        }
      ]
    },
    {
      "name": "document-source",
      "type": "registry:lib",
      "title": "Document source model",
      "description": "Viewer-agnostic model for extraction sources (the Retab /v1/extractions/{id}/sources shape): SourceAnchor union (pdf_bbox, image_bbox, spreadsheet/csv cell, docx/text span), Source, ExtractionSourcesResponse, and extractionSourcesToSourceMap to flatten the sources tree into a path-keyed SourceMap.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/document-source.ts",
          "type": "registry:lib",
          "target": "@lib/document-source.ts"
        }
      ]
    },
    {
      "name": "pdf-source",
      "type": "registry:ui",
      "title": "PDF source adapter",
      "description": "Bridges the document-source model to the PDF viewer: pdfAnchorToTarget and renderPdfSourceOverlay for PDF bbox anchors.",
      "registryDependencies": [
        "@retab/pdf-viewer",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/pdf-source.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-source.tsx"
        }
      ]
    },
    {
      "name": "segments",
      "type": "registry:lib",
      "title": "Segments model",
      "description": "Shared model + helpers for page-segmented results (partition/split): Segment type, Tableau palette, color map, page-range and confidence helpers.",
      "files": [
        {
          "path": "registry/new-york-v4/lib/segments.ts",
          "type": "registry:lib",
          "target": "@lib/segments.ts"
        }
      ]
    },
    {
      "name": "segment-interaction",
      "type": "registry:lib",
      "title": "Segment Interaction",
      "description": "React-free hover, focus, selection, and current-page helpers for Segment[] surfaces.",
      "registryDependencies": [
        "@retab/segments"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/lib/segment-interaction.ts",
          "type": "registry:lib",
          "target": "@lib/segment-interaction.ts"
        }
      ]
    },
    {
      "name": "use-segment-interaction",
      "type": "registry:ui",
      "title": "useSegmentInteraction",
      "description": "Client hook that coordinates hover, focus, and persistent selection across Segment[] surfaces.",
      "registryDependencies": [
        "@retab/segment-interaction"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/use-segment-interaction.ts",
          "type": "registry:ui",
          "target": "@ui/use-segment-interaction.ts"
        }
      ]
    },
    {
      "name": "segment-legend",
      "type": "registry:ui",
      "title": "Segment Legend",
      "description": "Compact color legend for a Segment[] with shared hover, focus, and selection state.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/segment-legend.tsx",
          "type": "registry:ui",
          "target": "@ui/segment-legend.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-document-model.ts"
        }
      ]
    },
    {
      "name": "segment-sidebar",
      "type": "registry:ui",
      "title": "Segment Sidebar",
      "description": "Selectable list of segments with page ranges and confidence bars.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/sidebar-list",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/segment-sidebar.tsx",
          "type": "registry:ui",
          "target": "@ui/segment-sidebar.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-document-model.ts"
        }
      ]
    },
    {
      "name": "page-timeline",
      "type": "registry:ui",
      "title": "Page Timeline",
      "description": "A colored page strip that ties a Segment[] to the document; hover/select syncing and click-to-jump.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/page-timeline.tsx",
          "type": "registry:ui",
          "target": "@ui/page-timeline.tsx"
        }
      ]
    },
    {
      "name": "page-ribbon",
      "type": "registry:ui",
      "title": "Page Ribbon",
      "description": "A page-axis ribbon: segments drawn as blocks spanning their pages. One vertical lane = a split sidebar; many horizontal rows (consensus + votes) = a partition waterfall. Shared hover/focus/selection + click-to-jump.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/page-ribbon.tsx",
          "type": "registry:ui",
          "target": "@ui/page-ribbon.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-document-model.ts"
        }
      ]
    },
    {
      "name": "segment-page-rail",
      "type": "registry:ui",
      "title": "Segment Page Rail",
      "description": "Vertical page rail for Segment[] documents with current-page following, scroll progress, and page selection.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/page-ribbon",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/segment-page-rail.tsx",
          "type": "registry:ui",
          "target": "@ui/segment-page-rail.tsx"
        }
      ]
    },
    {
      "name": "segmented-document",
      "type": "registry:ui",
      "title": "Segmented Document",
      "description": "Shared segmented-document model, provider, viewport controller, and anchor navigation for split, partition, source, OCR, and bbox viewers.",
      "registryDependencies": [
        "@retab/segments",
        "@retab/segment-interaction",
        "@retab/use-segment-interaction",
        "@retab/effect-key",
        "@retab/use-keyed-layout-effect",
        "@retab/use-keyed-mount-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-document-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-provider.tsx",
          "type": "registry:ui",
          "target": "@ui/segmented-document-provider.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-item-link.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-item-link.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-segment-viewport-controller.ts",
          "type": "registry:ui",
          "target": "@ui/use-segment-viewport-controller.ts"
        }
      ]
    },
    {
      "name": "schema-builder",
      "type": "registry:ui",
      "title": "Schema Builder",
      "description": "Controlled JSON Schema editor for building Retab extraction schemas \u2014 fields, types, nested objects, arrays, enums, and required flags.",
      "registryDependencies": [
        "@retab/utils",
        "@retab/alert-dialog",
        "@retab/form",
        "@retab/input",
        "@retab/label",
        "@retab/switch",
        "@retab/textarea",
        "dialog",
        "dropdown-menu",
        "tooltip",
        "@retab/effect-key",
        "@retab/use-keyed-layout-effect",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/schema-builder.tsx",
          "type": "registry:ui",
          "target": "@ui/schema-builder.tsx"
        },
        {
          "path": "components/schema-editor/document-array-node-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-array-node-editor.tsx"
        },
        {
          "path": "components/schema-editor/document-definitions-editor-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-definitions-editor-controller.ts"
        },
        {
          "path": "components/schema-editor/document-definitions-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-definitions-editor.tsx"
        },
        {
          "path": "components/schema-editor/document-enum-node-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-enum-node-editor.tsx"
        },
        {
          "path": "components/schema-editor/document-node-actions.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-actions.tsx"
        },
        {
          "path": "components/schema-editor/document-node-description-control.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-description-control.tsx"
        },
        {
          "path": "components/schema-editor/document-node-editor-types.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-editor-types.ts"
        },
        {
          "path": "components/schema-editor/document-node-header-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-header-controller.ts"
        },
        {
          "path": "components/schema-editor/document-node-header.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-header.tsx"
        },
        {
          "path": "components/schema-editor/document-node-name-control.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-name-control.tsx"
        },
        {
          "path": "components/schema-editor/document-node-reveal.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-reveal.ts"
        },
        {
          "path": "components/schema-editor/document-node-type-menu.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-node-type-menu.tsx"
        },
        {
          "path": "components/schema-editor/document-object-node-editor-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-object-node-editor-controller.ts"
        },
        {
          "path": "components/schema-editor/document-object-node-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-object-node-editor.tsx"
        },
        {
          "path": "components/schema-editor/document-property-add-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-property-add-row.tsx"
        },
        {
          "path": "components/schema-editor/document-property-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-property-row.tsx"
        },
        {
          "path": "components/schema-editor/document-schema-editor-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document-schema-editor-controller.ts"
        },
        {
          "path": "components/schema-editor/document-schema-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-schema-editor.tsx"
        },
        {
          "path": "components/schema-editor/document-schema-node-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/document-schema-node-editor.tsx"
        },
        {
          "path": "components/schema-editor/document/array.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/array.ts"
        },
        {
          "path": "components/schema-editor/document/convert.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/convert.ts"
        },
        {
          "path": "components/schema-editor/document/definition-operations.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/definition-operations.ts"
        },
        {
          "path": "components/schema-editor/document/derive.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/derive.ts"
        },
        {
          "path": "components/schema-editor/document/enum-operations.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/enum-operations.ts"
        },
        {
          "path": "components/schema-editor/document/id.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/id.ts"
        },
        {
          "path": "components/schema-editor/document/json-node.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/json-node.ts"
        },
        {
          "path": "components/schema-editor/document/json-pointer.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/json-pointer.ts"
        },
        {
          "path": "components/schema-editor/document/node-metadata.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/node-metadata.ts"
        },
        {
          "path": "components/schema-editor/document/node-selectors.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/node-selectors.ts"
        },
        {
          "path": "components/schema-editor/document/node-update.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/node-update.ts"
        },
        {
          "path": "components/schema-editor/document/property-operations.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/property-operations.ts"
        },
        {
          "path": "components/schema-editor/document/traversal.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/traversal.ts"
        },
        {
          "path": "components/schema-editor/document/type-operations.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/type-operations.ts"
        },
        {
          "path": "components/schema-editor/document/types.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/types.ts"
        },
        {
          "path": "components/schema-editor/document/view-model.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/document/view-model.ts"
        },
        {
          "path": "components/schema-editor/draft/draft-node-edits.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/draft/draft-node-edits.ts"
        },
        {
          "path": "components/schema-editor/enum-creation-dialog.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/enum-creation-dialog.tsx"
        },
        {
          "path": "components/schema-editor/lib/configure-ajv.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/lib/configure-ajv.ts"
        },
        {
          "path": "components/schema-editor/lib/json-schema-types.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/lib/json-schema-types.ts"
        },
        {
          "path": "components/schema-editor/lib/json-schema-utils.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/lib/json-schema-utils.ts"
        },
        {
          "path": "components/schema-editor/node-dialog.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/node-dialog.tsx"
        },
        {
          "path": "components/schema-editor/object-template-type-section.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/object-template-type-section.tsx"
        },
        {
          "path": "components/schema-editor/optional/import-export/import-export-menu-items.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/optional/import-export/import-export-menu-items.tsx"
        },
        {
          "path": "components/schema-editor/optional/json-mode/json-mode-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/optional/json-mode/json-mode-editor.tsx"
        },
        {
          "path": "components/schema-editor/optional/object-templates/object-template-menu.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/optional/object-templates/object-template-menu.tsx"
        },
        {
          "path": "components/schema-editor/optional/object-templates/object-template-reference.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/optional/object-templates/object-template-reference.ts"
        },
        {
          "path": "components/schema-editor/optional/object-templates/template-objects.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/optional/object-templates/template-objects.ts"
        },
        {
          "path": "components/schema-editor/primitives/schema-add-input-model.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-add-input-model.ts"
        },
        {
          "path": "components/schema-editor/primitives/schema-add-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-add-row.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-chip-add-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-chip-add-row.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-chip-list.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-chip-list.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-field-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-field-row.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-inline-description.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-inline-description.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-inline-name.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-inline-name.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-inline-text.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-inline-text.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-order.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-order.ts"
        },
        {
          "path": "components/schema-editor/primitives/schema-row-actions.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-row-actions.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-row-drag.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-row-drag.ts"
        },
        {
          "path": "components/schema-editor/primitives/schema-row-grip.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-row-grip.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-type-menu.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-type-menu.tsx"
        },
        {
          "path": "components/schema-editor/primitives/schema-type-options.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/primitives/schema-type-options.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/array-items-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/array-items-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/description-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/description-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/enum-value-identity.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/enum-value-identity.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/enum-values-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/enum-values-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/name-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/name-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/nullable-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/nullable-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-drag.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-drag.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-model.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-model.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-operations.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-operations.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-plan-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-plan-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-rows.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-rows.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-properties-state.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-properties-state.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-property-add-input.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-property-add-input.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-property-row-identity.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-property-row-identity.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-property-row-schema-plan.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-property-row-schema-plan.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/object-property-row.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/object-property-row.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/property-object-template-type-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/property-object-template-type-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/property-schema-plan-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/property-schema-plan-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/fields/property-type-field-model.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/property-type-field-model.ts"
        },
        {
          "path": "components/schema-editor/property-form/fields/type-field.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/fields/type-field.tsx"
        },
        {
          "path": "components/schema-editor/property-form/model/effective-node-edits.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/effective-node-edits.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/enum-values.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/enum-values.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/object-properties-view.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/object-properties-view.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/object-property-edits.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/object-property-edits.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/object-property-selectors.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/object-property-selectors.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/property-capabilities.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/property-capabilities.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/property-draft-commit.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/property-draft-commit.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/property-schema-plan.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/property-schema-plan.ts"
        },
        {
          "path": "components/schema-editor/property-form/model/property-validation.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/model/property-validation.ts"
        },
        {
          "path": "components/schema-editor/property-form/property-form-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/property-form-controller.ts"
        },
        {
          "path": "components/schema-editor/property-form/property-form-footer.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/property-form-footer.tsx"
        },
        {
          "path": "components/schema-editor/property-form/property-form-shell.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/property-form-shell.tsx"
        },
        {
          "path": "components/schema-editor/property-form/property-form-submit.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/property-form-submit.ts"
        },
        {
          "path": "components/schema-editor/property-form/property-form.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/property-form.tsx"
        },
        {
          "path": "components/schema-editor/property-form/reducer.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/reducer.ts"
        },
        {
          "path": "components/schema-editor/property-form/types.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/types.ts"
        },
        {
          "path": "components/schema-editor/property-form/validation.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/property-form/validation.ts"
        },
        {
          "path": "components/schema-editor/root-dialog.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/root-dialog.tsx"
        },
        {
          "path": "components/schema-editor/schema-builder-types.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-builder-types.ts"
        },
        {
          "path": "components/schema-editor/schema-builder.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-builder.tsx"
        },
        {
          "path": "components/schema-editor/schema-editor-mode.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-editor-mode.ts"
        },
        {
          "path": "components/schema-editor/schema-required-policy.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-required-policy.ts"
        },
        {
          "path": "components/schema-editor/schema-title.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-title.ts"
        },
        {
          "path": "components/schema-editor/schema-type-menu-sections.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-type-menu-sections.tsx"
        },
        {
          "path": "components/schema-editor/schema-validation.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/schema-validation.ts"
        },
        {
          "path": "components/schema-editor/top-level-editor-controller.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/top-level-editor-controller.ts"
        },
        {
          "path": "components/schema-editor/top-level-editor.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/top-level-editor.tsx"
        },
        {
          "path": "components/schema-editor/type-icons.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/type-icons.tsx"
        },
        {
          "path": "components/schema-editor/use-schema-builder-state.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/use-schema-builder-state.ts"
        },
        {
          "path": "components/schema-editor/validation-error-display.tsx",
          "type": "registry:component",
          "target": "@components/schema-editor/validation-error-display.tsx"
        },
        {
          "path": "components/schema-editor/validation.ts",
          "type": "registry:component",
          "target": "@components/schema-editor/validation.ts"
        },
        {
          "path": "registry/new-york-v4/ui/accordion.tsx",
          "type": "registry:ui",
          "target": "@ui/accordion.tsx"
        }
      ],
      "dependencies": [
        "ajv@^8.17.1",
        "ajv-errors@^3.0.0",
        "ajv-formats@^3.0.1",
        "lucide-react@^0.460.0",
        "radix-ui@^1.5.0",
        "sonner@^2.0.0"
      ]
    },
    {
      "name": "attachment-sidebar",
      "type": "registry:ui",
      "title": "Attachment Sidebar",
      "description": "File attachment navigator built from SidebarList primitives and FileThumbnail.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/utils",
        "@retab/sidebar-list",
        "@retab/file-size-format",
        "@retab/file-thumbnail"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/attachment-sidebar.tsx",
          "type": "registry:ui",
          "target": "@ui/attachment-sidebar.tsx"
        }
      ]
    },
    {
      "name": "email-viewer",
      "type": "registry:ui",
      "title": "Email Viewer",
      "description": "Render recursive MIME messages with headers, CID inline resources, nested messages, and File Viewer leaves.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/utils",
        "@retab/file-size-format",
        "@retab/file-thumbnail",
        "@retab/file-viewer",
        "@retab/viewer-controls"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/email-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/email-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/email-viewer-model.ts",
          "type": "registry:ui",
          "target": "@ui/email-viewer-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/email-viewer-inline-resources.ts",
          "type": "registry:ui",
          "target": "@ui/email-viewer-inline-resources.ts"
        },
        {
          "path": "registry/new-york-v4/ui/email-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/email-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/email-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/email-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/email-viewer-eml.ts",
          "type": "registry:ui",
          "target": "@ui/email-viewer-eml.ts"
        }
      ]
    },
    {
      "name": "file-thumbnail-frame",
      "type": "registry:ui",
      "title": "File Thumbnail Frame",
      "description": "Dependency-free thumbnail frame with a loading shimmer, fade-in, and muted fallback surface.",
      "registryDependencies": [
        "@retab/utils",
        "@retab/effect-key",
        "@retab/use-keyed-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-frame-types.ts",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-frame-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-extension.ts",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-extension.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-fallback.tsx",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-fallback.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-shimmer.tsx",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-shimmer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-image.tsx",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-image.tsx"
        }
      ]
    },
    {
      "name": "file-thumbnail",
      "type": "registry:ui",
      "title": "File Thumbnail",
      "description": "Render complete file thumbnails from browser files, URLs, blobs, text sources, external images, or custom preview content.",
      "registryDependencies": [
        "@retab/file-thumbnail-frame",
        "@retab/pdf-document-resource",
        "@retab/docx-document-resource",
        "@retab/csv",
        "@retab/xlsx-worker-protocol",
        "@retab/utils",
        "@retab/pptx-viewer"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/file-thumbnail.tsx",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-thumbnail-types.ts",
          "type": "registry:ui",
          "target": "@ui/file-thumbnail-types.ts"
        },
        {
          "path": "components/file-thumbnail/descriptor.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/descriptor.ts"
        },
        {
          "path": "components/file-thumbnail/errors.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/errors.tsx"
        },
        {
          "path": "components/file-thumbnail/generated-preview.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/generated-preview.tsx"
        },
        {
          "path": "components/file-thumbnail/keys.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/keys.ts"
        },
        {
          "path": "components/file-thumbnail/renderer-registry.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderer-registry.tsx"
        },
        {
          "path": "components/file-thumbnail/thumbnail-cache.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-cache.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-client-preview.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-client-preview.tsx"
        },
        {
          "path": "components/file-thumbnail/thumbnail-decode-queue.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-decode-queue.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-direct-image.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-direct-image.tsx"
        },
        {
          "path": "components/file-thumbnail/thumbnail-error-state.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-error-state.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-errors.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-errors.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-in-view.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-in-view.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-limits.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-limits.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-options.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-options.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-profile.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-profile.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-resource.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-resource.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-test-reset.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-test-reset.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-text.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-text.ts"
        },
        {
          "path": "components/file-thumbnail/thumbnail-worker-client.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-worker-client.ts"
        },
        {
          "path": "components/file-thumbnail/types.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/types.ts"
        },
        {
          "path": "components/file-thumbnail/renderers/csv-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/csv-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/docx-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/docx-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/html-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/html-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/image-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/image-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/layout.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/layout.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/markdown-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/markdown-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/msg-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/msg-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/pdf-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/pdf-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/pptx-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/pptx-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/text-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/text-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/tiff-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/tiff-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/renderers/use-object-url.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/use-object-url.ts"
        },
        {
          "path": "components/file-thumbnail/renderers/xlsx-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/xlsx-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail-tiff.worker.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail-tiff.worker.ts"
        },
        {
          "path": "components/file-thumbnail-xlsx.worker.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail-xlsx.worker.ts"
        },
        {
          "path": "components/file-thumbnail/renderers/code-thumbnail.tsx",
          "type": "registry:component",
          "target": "@components/file-thumbnail/renderers/code-thumbnail.tsx"
        },
        {
          "path": "components/file-thumbnail/thumbnail-code.ts",
          "type": "registry:component",
          "target": "@components/file-thumbnail/thumbnail-code.ts"
        },
        {
          "path": "registry/new-york-v4/ui/utif.d.ts",
          "type": "registry:ui",
          "target": "@ui/utif.d.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-render-cache.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-render-cache.ts"
        },
        {
          "path": "registry/new-york-v4/ui/docx-viewer-render.ts",
          "type": "registry:ui",
          "target": "@ui/docx-viewer-render.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-canvas.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-canvas.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-render-cache.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-render-cache.ts"
        }
      ],
      "dependencies": [
        "@e965/xlsx@0.20.3",
        "dompurify@^3.3.3",
        "marked@^15.0.12",
        "@kenjiuno/msgreader@^1.28.0",
        "pptxviewjs@1.1.9",
        "utif@^3.1.0",
        "docx-preview@^0.3.7"
      ]
    },
    {
      "name": "run-card",
      "type": "registry:ui",
      "title": "Run Card",
      "description": "A document run card: a file thumbnail with a status pill, a heading, and a result slot. Composes file-thumbnail; the result rendering is left to its children.",
      "dependencies": [
        "lucide-react@^0.514.0"
      ],
      "registryDependencies": [
        "@retab/utils",
        "@retab/file-thumbnail"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/run-card.tsx",
          "type": "registry:ui",
          "target": "@ui/run-card.tsx"
        }
      ]
    },
    {
      "name": "ocr-block",
      "type": "registry:block",
      "title": "OCR",
      "description": "OCR review for a scanned document: source page, detected text blocks, confidence filtering, and matching polygon overlays. Switch between Google Document AI, AWS Textract, and Azure Document Intelligence output.",
      "registryDependencies": [
        "@retab/layout-blocks"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/ocr-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/ocr-block.tsx"
        },
        {
          "path": "sample/documentai-output.json",
          "type": "registry:file",
          "target": "sample/documentai-output.json"
        },
        {
          "path": "sample/textract-output.json",
          "type": "registry:file",
          "target": "sample/textract-output.json"
        },
        {
          "path": "sample/azure-output.json",
          "type": "registry:file",
          "target": "sample/azure-output.json"
        }
      ],
      "categories": [
        "featured"
      ]
    },
    {
      "name": "split-viewer-block",
      "type": "registry:block",
      "title": "Split Viewer",
      "description": "Named subdocuments over a PDF: a legend header and a vertical page-ribbon sidebar, from the shared segment primitives.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/segment-legend",
        "@retab/segment-page-rail",
        "@retab/segmented-document",
        "@retab/segments"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/split-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-viewer-block.tsx"
        },
        {
          "path": "components/viewers/split/split-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/split/split-viewer.tsx"
        },
        {
          "path": "components/viewers/lib/split-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/split-types.ts"
        },
        {
          "path": "components/viewers/lib/partition-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/partition-types.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "partition-viewer-block",
      "type": "registry:block",
      "title": "Partition Viewer",
      "description": "Keyed chunks over a PDF: a legend plus a horizontal page-ribbon waterfall, from the shared segment primitives.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/segment-legend",
        "@retab/page-ribbon",
        "@retab/segmented-document",
        "@retab/segments"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/partition-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/partition-viewer-block.tsx"
        },
        {
          "path": "components/viewers/partition/partition-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/partition/partition-viewer.tsx"
        },
        {
          "path": "components/viewers/partition/partition-viewer-model.ts",
          "type": "registry:component",
          "target": "@components/viewers/partition/partition-viewer-model.ts"
        },
        {
          "path": "components/viewers/lib/partition-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/partition-types.ts"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "parse-viewer-block",
      "type": "registry:block",
      "title": "Parse Viewer",
      "description": "The source document beside its extracted markdown, synced by page, with a Rendered/Text toggle.",
      "dependencies": [
        "lucide-react",
        "react-markdown",
        "remark-gfm",
        "rehype-raw",
        "hast-util-to-jsx-runtime@^2.3.6",
        "remark-parse@^11.0.0",
        "remark-rehype@^11.1.2",
        "unified@^11.0.5"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "button",
        "dropdown-menu",
        "@retab/scroll-area",
        "@retab/resizable",
        "separator",
        "@retab/spinner",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/parse-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/parse-viewer-block.tsx"
        },
        {
          "path": "components/viewers/parse/parse-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/parse/parse-viewer.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-viewer.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-pane.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-pane.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-empty-state.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-empty-state.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-controls.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-controls.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-actions.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-actions.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-page-frame.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-page-frame.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-content.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-content.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-components.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-components.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-layout.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-layout.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-scale.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-scale.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-scroll.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-scroll.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-measurements.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-measurements.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-sync.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-sync.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-model.ts",
          "type": "registry:lib",
          "target": "@components/viewers/page-markdown/page-markdown-model.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/page-markdown/page-markdown-types.ts"
        },
        {
          "path": "hooks/use-element-width.ts",
          "type": "registry:hook",
          "target": "@hooks/use-element-width.ts"
        },
        {
          "path": "components/viewers/lib/parse-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/parse-types.ts"
        },
        {
          "path": "components/viewers/sample-data/parse.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/parse.json"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-projection.tsx",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-projection.tsx"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-projection-parser.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-projection-parser.ts"
        },
        {
          "path": "components/viewers/page-markdown/page-markdown-projection-protocol.ts",
          "type": "registry:component",
          "target": "@components/viewers/page-markdown/page-markdown-projection-protocol.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "edit-viewer-block",
      "type": "registry:block",
      "title": "Edit Viewer",
      "description": "Detected form fields beside a PDF source document, linked by their bbox \u2014 hover or select a field to highlight its region on the page; Preview stamps values over the source, and Filled renders a supplied output file.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/pdf-viewer",
        "@retab/file-viewer",
        "@retab/scroll-area",
        "tabs",
        "@retab/segmented-document",
        "@retab/document-anchor"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/edit-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/edit-viewer-block.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-types.ts",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-types.ts"
        },
        {
          "path": "components/viewers/edit/edit-viewer-model.ts",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-model.ts"
        },
        {
          "path": "components/viewers/edit/edit-viewer-field-style.ts",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-field-style.ts"
        },
        {
          "path": "components/viewers/edit/edit-viewer-store.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-store.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-provider.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-provider.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-anatomy.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-anatomy.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-document.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-document.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-fields.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-fields.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-header.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-header.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-states.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-states.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-controls.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-controls.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-overlays.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-overlays.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-field-panel.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-field-panel.tsx"
        },
        {
          "path": "components/viewers/edit/edit-viewer-document-pane.tsx",
          "type": "registry:component",
          "target": "@components/viewers/edit/edit-viewer-document-pane.tsx"
        },
        {
          "path": "components/viewers/lib/edit-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/edit-types.ts"
        },
        {
          "path": "components/viewers/sample-data/edit.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/edit.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "excel-splitting-viewer-block",
      "type": "registry:block",
      "title": "Excel Splitting",
      "description": "One Excel workbook fanned out into several clean CSVs \u2014 each reconstructed table rendered in the viewer, with a sidebar listing every CSV the splitter emitted, the sheet it was carved from, and how it was reconstructed. Selecting one opens that CSV.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/csv-viewer",
        "@retab/xlsx-viewer",
        "@retab/segments"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/excel-splitting-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/excel-splitting-viewer-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/excel-splitting.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/excel-splitting.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "txt-splitting-viewer-block",
      "type": "registry:block",
      "title": "Text Splitting",
      "description": "One plain-text batch file separated into several documents \u2014 each carved-out document rendered in the viewer, with a left sidebar listing the source file first, then every document the splitter emitted, its type, line count, and the boundary cue that detected it. Selecting one opens that document.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/text-viewer",
        "@retab/segments"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/txt-splitting-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/txt-splitting-viewer-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/txt-splitting.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/txt-splitting.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "extract-viewer-block",
      "type": "registry:block",
      "title": "Extract Viewer",
      "description": "Extracted data beside the source PDF, rendered as a JSON form and linked by sources \u2014 hover or select a field to highlight where its value came from and scroll the page to it.",
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/document-source",
        "@retab/scroll-area",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/utils",
        "@retab/source-field-link",
        "@retab/source-indicator",
        "@retab/data-cell",
        "@retab/input",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/extract-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/extract-viewer-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/extract.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/extract.json"
        },
        {
          "path": "components/json-form/array-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/array-fields.tsx"
        },
        {
          "path": "components/json-form/disclosure.tsx",
          "type": "registry:component",
          "target": "@components/json-form/disclosure.tsx"
        },
        {
          "path": "components/json-form/field-renderer.ts",
          "type": "registry:component",
          "target": "@components/json-form/field-renderer.ts"
        },
        {
          "path": "components/json-form/form-primitives.tsx",
          "type": "registry:component",
          "target": "@components/json-form/form-primitives.tsx"
        },
        {
          "path": "components/json-form/json-form-constants.ts",
          "type": "registry:component",
          "target": "@components/json-form/json-form-constants.ts"
        },
        {
          "path": "components/json-form/json-form.tsx",
          "type": "registry:component",
          "target": "@components/json-form/json-form.tsx"
        },
        {
          "path": "components/json-form/object-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/object-fields.tsx"
        },
        {
          "path": "components/json-form/open-paths.tsx",
          "type": "registry:component",
          "target": "@components/json-form/open-paths.tsx"
        },
        {
          "path": "components/json-form/path-codec.ts",
          "type": "registry:component",
          "target": "@components/json-form/path-codec.ts"
        },
        {
          "path": "components/json-form/scalar-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar-control.tsx"
        },
        {
          "path": "components/json-form/scalar/boolean-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/boolean-control.tsx"
        },
        {
          "path": "components/json-form/scalar/date-time-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/date-time-control.tsx"
        },
        {
          "path": "components/json-form/scalar/enum-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/enum-control.tsx"
        },
        {
          "path": "components/json-form/scalar/number-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/number-control.tsx"
        },
        {
          "path": "components/json-form/scalar/text-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/text-control.tsx"
        },
        {
          "path": "components/json-form/scalar/types.ts",
          "type": "registry:component",
          "target": "@components/json-form/scalar/types.ts"
        },
        {
          "path": "components/json-form/schema-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/schema-model.ts"
        },
        {
          "path": "components/json-form/source-link-table-hover.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-table-hover.ts"
        },
        {
          "path": "components/json-form/source-link.tsx",
          "type": "registry:component",
          "target": "@components/json-form/source-link.tsx"
        },
        {
          "path": "components/json-form/table/array-table-body.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-body.tsx"
        },
        {
          "path": "components/json-form/table/array-table-cell-commit.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-commit.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-model.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-props.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell.tsx"
        },
        {
          "path": "components/json-form/table/array-table-config.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-config.ts"
        },
        {
          "path": "components/json-form/table/array-table-format.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-format.ts"
        },
        {
          "path": "components/json-form/table/array-table-row.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-row.tsx"
        },
        {
          "path": "components/json-form/table/array-table-scroll.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-scroll.ts"
        },
        {
          "path": "components/json-form/table/array-table.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table.tsx"
        },
        {
          "path": "components/json-form/virtual-list.tsx",
          "type": "registry:component",
          "target": "@components/json-form/virtual-list.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/measured-row-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/measured-row-virtualization.ts"
        },
        {
          "path": "components/json-form/table/array-table-active-cell-store.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-active-cell-store.ts"
        },
        {
          "path": "components/json-form/table/array-table-data-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-data-cell-props.ts"
        },
        {
          "path": "components/json-form/source-link-focus-intent.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-focus-intent.ts"
        }
      ],
      "categories": [
        "primitives"
      ],
      "dependencies": [
        "react-hook-form",
        "@radix-ui/react-checkbox@^1.1.3",
        "@radix-ui/react-label@^2.1.1",
        "@radix-ui/react-slot@^1.1.1",
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "sources-viewer-block",
      "type": "registry:block",
      "title": "Sources Viewer",
      "description": "Every source-backed format in one viewer \u2014 PDF/image bbox sources use segmented-document anchors; text, CSV, Excel, and Word use segmented source links with format-specific target adapters.",
      "dependencies": [
        "react-hook-form",
        "json-schema",
        "@radix-ui/react-checkbox@^1.1.3",
        "@radix-ui/react-label@^2.1.1",
        "@radix-ui/react-slot@^1.1.1",
        "lucide-react@^0.460.0"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/image-viewer",
        "@retab/image-source",
        "@retab/text-viewer",
        "@retab/text-source",
        "@retab/csv-viewer",
        "@retab/csv-source",
        "@retab/xlsx-viewer",
        "@retab/xlsx-source",
        "@retab/docx-viewer",
        "@retab/docx-source",
        "@retab/document-source",
        "@retab/scroll-area",
        "@retab/segmented-document",
        "@retab/source-evidence",
        "@retab/source-segmented-document",
        "@retab/source-field-link",
        "@retab/source-indicator",
        "@retab/utils",
        "@retab/data-cell",
        "@retab/input",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/sources-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/sources-viewer-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/json-form-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/json-form-sources.json"
        },
        {
          "path": "components/viewers/sample-data/image-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/image-sources.json"
        },
        {
          "path": "components/viewers/sample-data/text-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/text-sources.json"
        },
        {
          "path": "components/viewers/sample-data/csv-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/csv-sources.json"
        },
        {
          "path": "components/viewers/sample-data/xlsx-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/xlsx-sources.json"
        },
        {
          "path": "components/viewers/sample-data/docx-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/docx-sources.json"
        },
        {
          "path": "components/json-form/array-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/array-fields.tsx"
        },
        {
          "path": "components/json-form/disclosure.tsx",
          "type": "registry:component",
          "target": "@components/json-form/disclosure.tsx"
        },
        {
          "path": "components/json-form/field-renderer.ts",
          "type": "registry:component",
          "target": "@components/json-form/field-renderer.ts"
        },
        {
          "path": "components/json-form/form-primitives.tsx",
          "type": "registry:component",
          "target": "@components/json-form/form-primitives.tsx"
        },
        {
          "path": "components/json-form/json-form-constants.ts",
          "type": "registry:component",
          "target": "@components/json-form/json-form-constants.ts"
        },
        {
          "path": "components/json-form/json-form.tsx",
          "type": "registry:component",
          "target": "@components/json-form/json-form.tsx"
        },
        {
          "path": "components/json-form/object-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/object-fields.tsx"
        },
        {
          "path": "components/json-form/open-paths.tsx",
          "type": "registry:component",
          "target": "@components/json-form/open-paths.tsx"
        },
        {
          "path": "components/json-form/path-codec.ts",
          "type": "registry:component",
          "target": "@components/json-form/path-codec.ts"
        },
        {
          "path": "components/json-form/scalar-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar-control.tsx"
        },
        {
          "path": "components/json-form/scalar/boolean-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/boolean-control.tsx"
        },
        {
          "path": "components/json-form/scalar/date-time-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/date-time-control.tsx"
        },
        {
          "path": "components/json-form/scalar/enum-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/enum-control.tsx"
        },
        {
          "path": "components/json-form/scalar/number-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/number-control.tsx"
        },
        {
          "path": "components/json-form/scalar/text-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/text-control.tsx"
        },
        {
          "path": "components/json-form/scalar/types.ts",
          "type": "registry:component",
          "target": "@components/json-form/scalar/types.ts"
        },
        {
          "path": "components/json-form/schema-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/schema-model.ts"
        },
        {
          "path": "components/json-form/source-link-table-hover.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-table-hover.ts"
        },
        {
          "path": "components/json-form/source-link.tsx",
          "type": "registry:component",
          "target": "@components/json-form/source-link.tsx"
        },
        {
          "path": "components/json-form/table/array-table-body.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-body.tsx"
        },
        {
          "path": "components/json-form/table/array-table-cell-commit.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-commit.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-model.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-props.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell.tsx"
        },
        {
          "path": "components/json-form/table/array-table-config.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-config.ts"
        },
        {
          "path": "components/json-form/table/array-table-format.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-format.ts"
        },
        {
          "path": "components/json-form/table/array-table-row.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-row.tsx"
        },
        {
          "path": "components/json-form/table/array-table-scroll.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-scroll.ts"
        },
        {
          "path": "components/json-form/table/array-table.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table.tsx"
        },
        {
          "path": "components/json-form/virtual-list.tsx",
          "type": "registry:component",
          "target": "@components/json-form/virtual-list.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/measured-row-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/measured-row-virtualization.ts"
        },
        {
          "path": "components/json-form/table/array-table-active-cell-store.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-active-cell-store.ts"
        },
        {
          "path": "components/json-form/table/array-table-data-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-data-cell-props.ts"
        },
        {
          "path": "components/json-form/source-link-focus-intent.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-focus-intent.ts"
        }
      ],
      "categories": [
        "sources"
      ]
    },
    {
      "name": "json-form-sources-block",
      "type": "registry:block",
      "title": "JSON Form Sources",
      "description": "Extraction rendered as a JSON form beside the source PDF \u2014 hover a form field to highlight where its value came from through segmented-document state.",
      "dependencies": [
        "react-hook-form",
        "@radix-ui/react-checkbox@^1.1.3",
        "@radix-ui/react-label@^2.1.1",
        "@radix-ui/react-slot@^1.1.1",
        "lucide-react@^0.460.0"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/document-source",
        "@retab/scroll-area",
        "@retab/segmented-document",
        "@retab/source-evidence",
        "@retab/source-segmented-document",
        "@retab/source-field-link",
        "@retab/source-indicator",
        "@retab/data-cell",
        "@retab/input",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/json-form-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/json-form-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/json-form-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/json-form-sources.json"
        },
        {
          "path": "components/json-form/array-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/array-fields.tsx"
        },
        {
          "path": "components/json-form/disclosure.tsx",
          "type": "registry:component",
          "target": "@components/json-form/disclosure.tsx"
        },
        {
          "path": "components/json-form/field-renderer.ts",
          "type": "registry:component",
          "target": "@components/json-form/field-renderer.ts"
        },
        {
          "path": "components/json-form/form-primitives.tsx",
          "type": "registry:component",
          "target": "@components/json-form/form-primitives.tsx"
        },
        {
          "path": "components/json-form/json-form-constants.ts",
          "type": "registry:component",
          "target": "@components/json-form/json-form-constants.ts"
        },
        {
          "path": "components/json-form/json-form.tsx",
          "type": "registry:component",
          "target": "@components/json-form/json-form.tsx"
        },
        {
          "path": "components/json-form/object-fields.tsx",
          "type": "registry:component",
          "target": "@components/json-form/object-fields.tsx"
        },
        {
          "path": "components/json-form/open-paths.tsx",
          "type": "registry:component",
          "target": "@components/json-form/open-paths.tsx"
        },
        {
          "path": "components/json-form/path-codec.ts",
          "type": "registry:component",
          "target": "@components/json-form/path-codec.ts"
        },
        {
          "path": "components/json-form/scalar-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar-control.tsx"
        },
        {
          "path": "components/json-form/scalar/boolean-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/boolean-control.tsx"
        },
        {
          "path": "components/json-form/scalar/date-time-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/date-time-control.tsx"
        },
        {
          "path": "components/json-form/scalar/enum-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/enum-control.tsx"
        },
        {
          "path": "components/json-form/scalar/number-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/number-control.tsx"
        },
        {
          "path": "components/json-form/scalar/text-control.tsx",
          "type": "registry:component",
          "target": "@components/json-form/scalar/text-control.tsx"
        },
        {
          "path": "components/json-form/scalar/types.ts",
          "type": "registry:component",
          "target": "@components/json-form/scalar/types.ts"
        },
        {
          "path": "components/json-form/schema-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/schema-model.ts"
        },
        {
          "path": "components/json-form/source-link-table-hover.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-table-hover.ts"
        },
        {
          "path": "components/json-form/source-link.tsx",
          "type": "registry:component",
          "target": "@components/json-form/source-link.tsx"
        },
        {
          "path": "components/json-form/table/array-table-body.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-body.tsx"
        },
        {
          "path": "components/json-form/table/array-table-cell-commit.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-commit.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-model.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-model.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell-props.ts"
        },
        {
          "path": "components/json-form/table/array-table-cell.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-cell.tsx"
        },
        {
          "path": "components/json-form/table/array-table-config.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-config.ts"
        },
        {
          "path": "components/json-form/table/array-table-format.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-format.ts"
        },
        {
          "path": "components/json-form/table/array-table-row.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-row.tsx"
        },
        {
          "path": "components/json-form/table/array-table-scroll.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-scroll.ts"
        },
        {
          "path": "components/json-form/table/array-table.tsx",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table.tsx"
        },
        {
          "path": "components/json-form/virtual-list.tsx",
          "type": "registry:component",
          "target": "@components/json-form/virtual-list.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/measured-row-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/measured-row-virtualization.ts"
        },
        {
          "path": "components/json-form/table/array-table-active-cell-store.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-active-cell-store.ts"
        },
        {
          "path": "components/json-form/table/array-table-data-cell-props.ts",
          "type": "registry:component",
          "target": "@components/json-form/table/array-table-data-cell-props.ts"
        },
        {
          "path": "components/json-form/source-link-focus-intent.ts",
          "type": "registry:component",
          "target": "@components/json-form/source-link-focus-intent.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "pdf-viewer-thumbnails",
      "type": "registry:ui",
      "title": "PDF Viewer Thumbnails",
      "description": "PDF-owned page thumbnail navigation for explicit PdfViewer composition: lazy pdfjs thumbnails, active-page highlight, and click-to-jump.",
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/utils",
        "@retab/spinner"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-thumbnails.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-thumbnails.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-layout.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-document.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-document.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-page-metrics.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-page-metrics.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-window.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-window.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-thumbnail-rail-follow.ts",
          "type": "registry:ui",
          "target": "@ui/use-thumbnail-rail-follow.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-rail.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-rail.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-item.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-item.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-canvas.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-canvas.tsx"
        }
      ]
    },
    {
      "name": "dropzone-block",
      "type": "registry:block",
      "title": "Dropzone",
      "description": "A file-uploader lab proving the headless dropzone primitive across default, non-button, native-button, controlled, validation-only, custom grid, upload progress, uploader-viewer, and disabled surfaces.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-viewer",
        "@retab/file-size-format",
        "@retab/file-uploader",
        "@retab/file-thumbnail"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-block.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-showcase.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-showcase.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-file-uploader-example.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-file-uploader-example.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-file-viewer-example.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-file-viewer-example.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-trigger-examples.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-trigger-examples.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-controlled-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-controlled-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-disabled-dropzone.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-disabled-dropzone.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-native-button-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-native-button-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-non-button-trigger.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-non-button-trigger.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-validation-only.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-validation-only.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-file-examples.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-file-examples.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-avatar-image-slot.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-avatar-image-slot.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-custom-thumbnail-grid.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-custom-thumbnail-grid.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-evidence-timeline.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-evidence-timeline.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-media-transcript-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-media-transcript-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-spreadsheet-import-card.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-spreadsheet-import-card.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-uploader-viewer.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-uploader-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-uploader-viewer-parts.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-uploader-viewer-parts.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-workflow-examples.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-workflow-examples.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-comparison-pair-upload.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-comparison-pair-upload.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-intake-router.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-intake-router.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-pinboard-drop-surface.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-pinboard-drop-surface.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-required-packet-slots.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-required-packet-slots.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-upload-progress-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-upload-progress-queue.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "file-system-block",
      "type": "registry:block",
      "title": "File System",
      "description": "A document workspace over a flat object-store manifest with list, grid, columns, generated thumbnails, and persistent file previews.",
      "dependencies": [
        "lucide-react",
        "@pierre/trees"
      ],
      "registryDependencies": [
        "@retab/file-system"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/file-system-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/file-system-block.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/file-system-demo-state.ts",
          "type": "registry:component",
          "target": "@components/blocks/file-system-demo-state.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "fslight-block",
      "type": "registry:block",
      "title": "File System Light",
      "description": "A purified composition experiment: file tree in a ViewerSidebar, selected source rendered by FileViewer in a ViewerSurface.",
      "dependencies": [
        "@pierre/trees"
      ],
      "registryDependencies": [
        "@retab/file-system-light"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/fslight-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/fslight-block.tsx"
        }
      ],
      "categories": [
        "file-system"
      ]
    },
    {
      "name": "primitive-run-cards",
      "type": "registry:ui",
      "title": "Primitive Run Card Components",
      "description": "Prop-driven run cards for each Retab primitive \u2014 classify, split, partition, parse, and extract \u2014 each framing the source document with that primitive's result over the shared RunCard shell. Presentational: pass the resolved result (category, segments, markdown, or extract fields), so the same cards render a static demo or a live workflow run's per-block result.",
      "dependencies": [
        "react-markdown@^10.1.0",
        "remark-gfm@^4.0.1"
      ],
      "registryDependencies": [
        "@retab/run-card",
        "@retab/segments",
        "@retab/page-ribbon",
        "@retab/segment-legend",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/primitive-run-cards.tsx",
          "type": "registry:ui",
          "target": "@ui/primitive-run-cards.tsx"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "primitive-cards-block",
      "type": "registry:block",
      "title": "Primitive Run Cards",
      "description": "Each Retab primitive's result framed as a run card \u2014 a document thumbnail with a status pill and the primitive's output in the card body. Classification shows the page with its category and reasoning; split a mini page rail of color-keyed subdocuments; partition a keyed-chunk legend with an overlap ribbon; parse the page rendered as markdown; extract the page with each field's source box drawn over it. Composes the primitive-run-cards components over sample results.",
      "registryDependencies": [
        "@retab/primitive-run-cards"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/primitive-cards-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/primitive-cards-block.tsx"
        },
        {
          "path": "components/viewers/lib/classify-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/classify-types.ts"
        },
        {
          "path": "components/viewers/lib/split-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/split-types.ts"
        },
        {
          "path": "components/viewers/lib/partition-types.ts",
          "type": "registry:lib",
          "target": "@components/viewers/lib/partition-types.ts"
        },
        {
          "path": "components/viewers/sample-data/extract.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/extract.json"
        },
        {
          "path": "components/viewers/sample-data/parse.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/parse.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "pdf-thumbnails-block",
      "type": "registry:block",
      "title": "PDF Thumbnails",
      "description": "A PDF viewer with toggleable page thumbnails in a viewer navigation rail.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/pdf-viewer-thumbnails",
        "button"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/pdf-thumbnails-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/pdf-thumbnails-block.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-viewer-thumbnails.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-viewer-thumbnails.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-layout.ts",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-document.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-document.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-page-metrics.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-page-metrics.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-pdf-thumbnail-window.ts",
          "type": "registry:ui",
          "target": "@ui/use-pdf-thumbnail-window.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-thumbnail-rail-follow.ts",
          "type": "registry:ui",
          "target": "@ui/use-thumbnail-rail-follow.ts"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-rail.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-rail.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-item.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-item.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/pdf-thumbnail-canvas.tsx",
          "type": "registry:ui",
          "target": "@ui/pdf-thumbnail-canvas.tsx"
        }
      ]
    },
    {
      "name": "source-field-list",
      "type": "registry:ui",
      "title": "Source field list",
      "description": "A field list that drives source-field interaction: hover previews the field location in the viewer, click selects it.",
      "registryDependencies": [
        "@retab/interactive-item-list",
        "@retab/source-field-link",
        "@retab/source-evidence",
        "@retab/utils",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-field-list.tsx",
          "type": "registry:ui",
          "target": "@ui/source-field-list.tsx"
        }
      ]
    },
    {
      "name": "source-field-link",
      "type": "registry:ui",
      "title": "Source field link",
      "description": "A field-path adapter over segmented-document anchors.",
      "registryDependencies": [
        "@retab/segmented-document"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-field-link.ts",
          "type": "registry:ui",
          "target": "@ui/source-field-link.ts"
        }
      ]
    },
    {
      "name": "document-anchor",
      "type": "registry:ui",
      "title": "Document anchor",
      "description": "Pure document location types used by evidence projection and viewer target adapters.",
      "files": [
        {
          "path": "registry/new-york-v4/ui/document-anchor.ts",
          "type": "registry:ui",
          "target": "@ui/document-anchor.ts"
        }
      ]
    },
    {
      "name": "document-evidence",
      "type": "registry:ui",
      "title": "Document evidence",
      "description": "Pure projection types for semantic evidence rows that can resolve to document anchors.",
      "registryDependencies": [
        "@retab/document-anchor"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/document-evidence.ts",
          "type": "registry:ui",
          "target": "@ui/document-evidence.ts"
        }
      ]
    },
    {
      "name": "interactive-item-list",
      "type": "registry:ui",
      "title": "Interactive item list",
      "description": "A virtualized listbox interaction primitive for preview, selection, keyboard navigation, and visible-item reporting.",
      "registryDependencies": [
        "@retab/scroll-area",
        "@retab/utils",
        "@retab/effect-key",
        "@retab/use-keyed-layout-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/interactive-item-list.tsx",
          "type": "registry:ui",
          "target": "@ui/interactive-item-list.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/measured-row-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/measured-row-virtualization.ts"
        }
      ]
    },
    {
      "name": "source-evidence",
      "type": "registry:ui",
      "title": "Source evidence",
      "description": "Projection helpers that convert document sources, source maps, and source fields into evidence rows with resolved document anchors.",
      "registryDependencies": [
        "@retab/document-evidence",
        "@retab/document-source",
        "@retab/source-anchor"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-evidence.ts",
          "type": "registry:ui",
          "target": "@ui/source-evidence.ts"
        }
      ]
    },
    {
      "name": "source-segmented-document",
      "type": "registry:ui",
      "title": "Source segmented document",
      "description": "Projection helpers and overlays that convert PDF/image bbox document sources into segmented-document segments, anchors, and active source highlights.",
      "registryDependencies": [
        "@retab/document-source",
        "@retab/source-field-link",
        "@retab/image-source",
        "@retab/image-viewer",
        "@retab/pdf-viewer",
        "@retab/segmented-document"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/source-segmented-document-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/source-segmented-document-overlays.tsx",
          "type": "registry:ui",
          "target": "@ui/source-segmented-document-overlays.tsx"
        }
      ]
    },
    {
      "name": "layout-blocks-segmented-document",
      "type": "registry:ui",
      "title": "Layout blocks segmented document",
      "description": "Projection helpers that convert OCR/layout blocks into segmented-document segments and anchors.",
      "registryDependencies": [
        "@retab/layout-blocks",
        "@retab/segmented-document"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/layout-blocks-segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/layout-blocks-segmented-document-model.ts"
        }
      ]
    },
    {
      "name": "source-anchor",
      "type": "registry:ui",
      "title": "Source anchor",
      "description": "Pure conversion from document-source anchors to document viewer anchors.",
      "registryDependencies": [
        "@retab/document-anchor",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-anchor.ts",
          "type": "registry:ui",
          "target": "@ui/source-anchor.ts"
        }
      ]
    },
    {
      "name": "image-source",
      "type": "registry:ui",
      "title": "Image source adapter",
      "description": "Bridges the document-source model to the image viewer: imageAnchorToTarget, rotateImageArea, and renderImageSourceOverlay for image_bbox anchors.",
      "registryDependencies": [
        "@retab/image-viewer",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/lib/image-geometry.ts",
          "type": "registry:lib",
          "target": "@lib/image-geometry.ts"
        },
        {
          "path": "registry/new-york-v4/ui/image-source.tsx",
          "type": "registry:ui",
          "target": "@ui/image-source.tsx"
        }
      ]
    },
    {
      "name": "code-viewer",
      "type": "registry:ui",
      "title": "Code Viewer",
      "description": "A fixed-line code and log viewer with line numbers, custom virtualization, source-line highlights, retry, zoom, and download.",
      "dependencies": [
        "lucide-react",
        "prismjs@^1.30.0"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu",
        "@retab/scroll-area",
        "@retab/skeleton",
        "@retab/utils",
        "@retab/viewer-controls",
        "@retab/use-mount-effect",
        "@retab/use-keyed-layout-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/code-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/code-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/code-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-code-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/text-code-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-viewer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/plain-text-viewer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/code-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-projector.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-projector.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-projection-scheduler.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-projection-scheduler.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-protocol.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-protocol.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-prism.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-prism.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-worker.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax.worker.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-prism-components.d.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-prism-components.d.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-style.tsx",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-style.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-viewport.tsx",
          "type": "registry:ui",
          "target": "@ui/code-viewer-viewport.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/line-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/line-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-resource.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-resource.ts",
          "type": "registry:ui",
          "target": "@ui/plain-text-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-long-lines.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-long-lines.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-scroll-interactions.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-scroll-interactions.ts"
        }
      ],
      "devDependencies": [
        "@types/prismjs@^1.26.6"
      ]
    },
    {
      "name": "text-viewer",
      "type": "registry:ui",
      "title": "Text Viewer",
      "description": "A Pretext-powered prose viewer with natural wrapping, custom variable-height virtualization, source-line highlights, retry, zoom, and download.",
      "dependencies": [
        "@chenglou/pretext",
        "hast-util-to-jsx-runtime",
        "katex",
        "lucide-react",
        "marked@18.0.5",
        "mermaid",
        "rehype-katex",
        "rehype-raw",
        "rehype-sanitize",
        "rehype-slug",
        "remark-breaks",
        "remark-directive",
        "remark-gemoji",
        "remark-gfm",
        "remark-math",
        "remark-parse",
        "remark-rehype",
        "remark-smartypants",
        "prismjs@^1.30.0",
        "unified",
        "vfile"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu",
        "@retab/scroll-area",
        "@retab/skeleton",
        "@retab/utils",
        "@retab/viewer-controls",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/text-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-core.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-core.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-code-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/text-code-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-viewer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/plain-text-viewer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-content.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-chenglou-content.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-chenglou-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-content.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-diagram.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-diagram.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document-store.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document-store.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document.worker.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-layout.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-renderer.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-renderer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-virtualizer.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-virtualizer.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-hast-types.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-hast-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-source-map.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-source-map.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-unified-pipeline.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-unified-pipeline.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-url-policy.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-url-policy.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/line-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/line-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-resource.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-resource.ts",
          "type": "registry:ui",
          "target": "@ui/plain-text-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-dom-projection.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-dom-projection.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-scroll-interactions.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-scroll-interactions.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-prism.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-prism.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-protocol.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-protocol.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight-html.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight-html.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight-protocol.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight-protocol.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight.worker.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-prism-components.d.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-prism-components.d.ts"
        },
        {
          "path": "registry/new-york-v4/ui/mermaid-renderer.ts",
          "type": "registry:ui",
          "target": "@ui/mermaid-renderer.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-renderer-frame.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-renderer-frame.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        }
      ],
      "devDependencies": [
        "@types/prismjs@^1.26.6"
      ]
    },
    {
      "name": "text-viewer-chenglou",
      "type": "registry:ui",
      "title": "Chenglou Text Viewer",
      "description": "An imperative Pretext prose viewer that keeps Text Viewer parsing/layout but projects visible rows through a Chenglou-style DOM cache.",
      "registryDependencies": [
        "@retab/text-viewer"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/text-viewer-chenglou.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-chenglou.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-chenglou-content.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-chenglou-content.tsx"
        }
      ]
    },
    {
      "name": "markdown-viewer",
      "type": "registry:ui",
      "title": "Markdown Viewer",
      "description": "A continuous Markdown viewer forked from the Chenglou Pretext text viewer, with block virtualization and no visible page model.",
      "dependencies": [
        "@chenglou/pretext",
        "hast-util-to-jsx-runtime",
        "katex",
        "lucide-react",
        "marked@18.0.5",
        "mermaid",
        "rehype-katex",
        "rehype-raw",
        "rehype-sanitize",
        "rehype-slug",
        "remark-breaks",
        "remark-directive",
        "remark-gemoji",
        "remark-gfm",
        "remark-math",
        "remark-parse",
        "remark-rehype",
        "remark-smartypants",
        "prismjs@^1.30.0",
        "unified",
        "vfile"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu",
        "@retab/scroll-area",
        "@retab/skeleton",
        "@retab/spinner",
        "@retab/utils",
        "@retab/viewer-controls",
        "@retab/use-keyed-layout-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/markdown-viewer.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-viewer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/plain-text-viewer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/text-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-code-viewer-chrome.tsx",
          "type": "registry:ui",
          "target": "@ui/text-code-viewer-chrome.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-download.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-download.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-error.tsx",
          "type": "registry:ui",
          "target": "@ui/viewer-error.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-layout.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/line-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/line-ranges.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-resource.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/plain-text-resource.ts",
          "type": "registry:ui",
          "target": "@ui/plain-text-resource.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-scale.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-scale.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-source.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-source.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-resource.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-resource.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-download-actions.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-download-actions.ts"
        },
        {
          "path": "registry/new-york-v4/lib/viewer-errors.ts",
          "type": "registry:lib",
          "target": "@lib/viewer-errors.ts"
        },
        {
          "path": "registry/new-york-v4/ui/use-is-client.ts",
          "type": "registry:ui",
          "target": "@ui/use-is-client.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-content.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-content.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-diagram.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-diagram.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document-store.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document-store.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-document.worker.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-document.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-layout.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-layout.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-renderer.tsx",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-renderer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-virtualizer.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-virtualizer.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-hast-types.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-hast-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-source-map.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-source-map.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-unified-pipeline.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-unified-pipeline.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-url-policy.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-url-policy.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-virtualization.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-virtualization.ts"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-scroll-interactions.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-scroll-interactions.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-prism.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-prism.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-syntax-protocol.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-syntax-protocol.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight-html.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight-html.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight-protocol.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight-protocol.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-code-highlight.worker.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-code-highlight.worker.ts"
        },
        {
          "path": "registry/new-york-v4/ui/code-viewer-prism-components.d.ts",
          "type": "registry:ui",
          "target": "@ui/code-viewer-prism-components.d.ts"
        },
        {
          "path": "registry/new-york-v4/ui/mermaid-renderer.ts",
          "type": "registry:ui",
          "target": "@ui/mermaid-renderer.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-context.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-context.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-elements.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-elements.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-kernel.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-kernel.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-contract.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-contract.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-renderer-frame.tsx",
          "type": "registry:ui",
          "target": "@ui/file-viewer-renderer-frame.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-motion-plan.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-motion-plan.ts"
        },
        {
          "path": "registry/new-york-v4/ui/markdown-greenfield-renderer-frame.ts",
          "type": "registry:ui",
          "target": "@ui/markdown-greenfield-renderer-frame.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-types.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-types.ts"
        },
        {
          "path": "registry/new-york-v4/ui/viewer-measurement.ts",
          "type": "registry:ui",
          "target": "@ui/viewer-measurement.ts"
        },
        {
          "path": "registry/new-york-v4/ui/file-viewer-fit-width-motion.ts",
          "type": "registry:ui",
          "target": "@ui/file-viewer-fit-width-motion.ts"
        }
      ],
      "devDependencies": [
        "@types/prismjs@^1.26.6"
      ]
    },
    {
      "name": "text-source",
      "type": "registry:ui",
      "title": "Text source adapter",
      "description": "Bridges the document-source model to text viewers: textAnchorToTarget and sourceToTextHighlight for text_span anchors.",
      "registryDependencies": [
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/text-source.tsx",
          "type": "registry:ui",
          "target": "@ui/text-source.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/text-viewer-ranges.ts",
          "type": "registry:ui",
          "target": "@ui/text-viewer-ranges.ts"
        }
      ]
    },
    {
      "name": "csv-source",
      "type": "registry:ui",
      "title": "CSV source adapter",
      "description": "Bridges the document-source model to the CSV viewer: csvAnchorToTarget and sourceToCsvCell for csv_cell anchors.",
      "registryDependencies": [
        "@retab/csv-viewer",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/csv-source.tsx",
          "type": "registry:ui",
          "target": "@ui/csv-source.tsx"
        }
      ]
    },
    {
      "name": "xlsx-source",
      "type": "registry:ui",
      "title": "Excel source adapter",
      "description": "Bridges the document-source model to the XLSX viewer: xlsxAnchorToTarget and sourceToXlsxCell for spreadsheet_cell anchors.",
      "registryDependencies": [
        "@retab/xlsx-viewer",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/xlsx-source.tsx",
          "type": "registry:ui",
          "target": "@ui/xlsx-source.tsx"
        }
      ]
    },
    {
      "name": "docx-source",
      "type": "registry:ui",
      "title": "DOCX source adapter",
      "description": "Bridges the document-source model to the DOCX viewer: docxAnchorToTarget and sourceToDocxHighlight for docx_text_span and docx_table_cell anchors.",
      "registryDependencies": [
        "@retab/docx-viewer",
        "@retab/document-source"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/docx-source.tsx",
          "type": "registry:ui",
          "target": "@ui/docx-source.tsx"
        }
      ]
    },
    {
      "name": "image-sources-block",
      "type": "registry:block",
      "title": "Image Sources",
      "description": "Extracted fields linked to a scanned page image \u2014 hover to highlight the image_bbox region.",
      "registryDependencies": [
        "@retab/image-viewer",
        "@retab/image-source",
        "@retab/document-source",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/source-field-list",
        "@retab/source-field-link",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/image-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/image-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/image-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/image-sources.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "text-sources-block",
      "type": "registry:block",
      "title": "Text Sources",
      "description": "Values extracted from a log file linked to the lines they came from \u2014 hover to highlight a line range.",
      "registryDependencies": [
        "@retab/text-viewer",
        "@retab/text-source",
        "@retab/document-source",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/source-field-list",
        "@retab/source-field-link",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/text-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/text-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/text-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/text-sources.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "docx-sources-block",
      "type": "registry:block",
      "title": "DOCX Sources",
      "description": "Values extracted from a Word document linked back to where they came from \u2014 hover to highlight the text and scroll to it.",
      "registryDependencies": [
        "@retab/docx-viewer",
        "@retab/docx-source",
        "@retab/document-source",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/source-field-list",
        "@retab/source-field-link",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/docx-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/docx-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/docx-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/docx-sources.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "csv-sources-block",
      "type": "registry:block",
      "title": "CSV Sources",
      "description": "Extracted values linked to spreadsheet cells \u2014 hover to highlight a cell and scroll to it.",
      "registryDependencies": [
        "@retab/csv-viewer",
        "@retab/csv-source",
        "@retab/document-source",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/source-field-list",
        "@retab/source-field-link",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/csv-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/csv-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/csv-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/csv-sources.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "xlsx-sources-block",
      "type": "registry:block",
      "title": "Excel Sources",
      "description": "Extracted values linked to spreadsheet cells across sheets \u2014 hover to switch sheet, highlight the cell, and scroll to it.",
      "registryDependencies": [
        "@retab/xlsx-viewer",
        "@retab/xlsx-source",
        "@retab/document-source",
        "@retab/segmented-document",
        "@retab/source-segmented-document",
        "@retab/source-field-list",
        "@retab/source-field-link",
        "@retab/source-indicator"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/xlsx-sources-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/xlsx-sources-block.tsx"
        },
        {
          "path": "components/viewers/sample-data/xlsx-sources.json",
          "type": "registry:file",
          "target": "@components/viewers/sample-data/xlsx-sources.json"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "source-indicator",
      "type": "registry:ui",
      "title": "Source indicator",
      "description": "A floating pill that reports active field source state over a viewer: nothing selected, a located field path, or a field with no source.",
      "registryDependencies": [
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/ui/source-indicator.tsx",
          "type": "registry:ui",
          "target": "@ui/source-indicator.tsx"
        }
      ],
      "dependencies": [
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "dropzone-file-uploader-example",
      "type": "registry:block",
      "title": "Default File Uploader",
      "description": "The standard visual file uploader built on the headless dropzone primitive.",
      "registryDependencies": [
        "@retab/file-uploader"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-file-uploader-example.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-file-uploader-example.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:file",
          "target": "registry/new-york-v4/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ],
      "dependencies": [
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "dropzone-file-viewer-example",
      "type": "registry:block",
      "title": "Uploader + Viewer",
      "description": "One upload surface that becomes a file viewer, with the uploaded blob rendered by FileViewer.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-viewer",
        "@retab/file-size-format",
        "@retab/file-thumbnail"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-file-viewer-example.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-file-viewer-example.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-uploader-viewer.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-uploader-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-uploader-viewer-parts.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-uploader-viewer-parts.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:file",
          "target": "registry/new-york-v4/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-non-button-trigger",
      "type": "registry:block",
      "title": "Non-Button Trigger",
      "description": "A custom element opens the file dialog while preserving dropzone state.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-non-button-trigger.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-non-button-trigger.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-native-button-queue",
      "type": "registry:block",
      "title": "Native Button Queue",
      "description": "A real button trigger with browser button semantics and a small selected-file queue.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-native-button-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-native-button-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-controlled-queue",
      "type": "registry:block",
      "title": "Controlled Queue",
      "description": "Parent-owned file state with controlled selected files and explicit clear behavior.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-controlled-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-controlled-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-validation-only",
      "type": "registry:block",
      "title": "Validation Only",
      "description": "Validate accepted files and rejection details without storing selected files.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-validation-only.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-validation-only.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-custom-thumbnail-grid",
      "type": "registry:block",
      "title": "Custom Thumbnail Grid",
      "description": "Direct useDropzone composition with FileThumbnail previews in a custom grid.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-custom-thumbnail-grid.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-custom-thumbnail-grid.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-media-transcript-queue",
      "type": "registry:block",
      "title": "Media Transcript Queue",
      "description": "Audio and video files queued as transcript jobs with per-file thumbnails.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-media-transcript-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-media-transcript-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-upload-progress-queue",
      "type": "registry:block",
      "title": "Upload Progress Queue",
      "description": "A dropzone-backed upload queue with per-file loading bars keyed by the admitted file ids.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-size-format",
        "@retab/utils",
        "@retab/use-keyed-mount-effect",
        "@retab/use-mount-effect"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-upload-progress-queue.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-upload-progress-queue.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-avatar-image-slot",
      "type": "registry:block",
      "title": "Avatar Image Slot",
      "description": "A single replaceable image slot with a custom circular preview.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-avatar-image-slot.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-avatar-image-slot.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-spreadsheet-import-card",
      "type": "registry:block",
      "title": "Spreadsheet Import",
      "description": "A single spreadsheet upload feeding a mapping workflow.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-spreadsheet-import-card.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-spreadsheet-import-card.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-evidence-timeline",
      "type": "registry:block",
      "title": "Evidence Timeline",
      "description": "Files become ordered evidence events inside a custom surface.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-evidence-timeline.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-evidence-timeline.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-comparison-pair-upload",
      "type": "registry:block",
      "title": "Comparison Pair",
      "description": "Two independent dropzones model original versus revision documents.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/file-size-format",
        "@retab/utils"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-comparison-pair-upload.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-comparison-pair-upload.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-intake-router",
      "type": "registry:block",
      "title": "Intake Router",
      "description": "One intake target routes selected files into document, image, and table lanes.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-intake-router.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-intake-router.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ]
    },
    {
      "name": "dropzone-required-packet-slots",
      "type": "registry:block",
      "title": "Required Packet",
      "description": "Slot-level dropzones for checklist-driven packet collection.",
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-required-packet-slots.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-required-packet-slots.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ],
      "dependencies": [
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "dropzone-pinboard-drop-surface",
      "type": "registry:block",
      "title": "Pinboard Drop Surface",
      "description": "A full canvas trigger that pins dropped files as cards.",
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/file-thumbnail",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-pinboard-drop-surface.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-pinboard-drop-surface.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ],
      "dependencies": [
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "dropzone-disabled-dropzone",
      "type": "registry:block",
      "title": "Disabled Dropzone",
      "description": "Disabled input, trigger focus, intake, and drag behavior.",
      "registryDependencies": [
        "@retab/dropzone",
        "@retab/utils",
        "@retab/file-size-format"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/dropzone-disabled-dropzone.tsx",
          "type": "registry:component",
          "target": "@components/blocks/dropzone-disabled-dropzone.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/dropzone-example-shared.tsx",
          "type": "registry:file",
          "target": "registry/new-york-v4/blocks/dropzone-example-shared.tsx"
        }
      ],
      "categories": [
        "dropzone"
      ],
      "dependencies": [
        "lucide-react@^0.460.0"
      ]
    },
    {
      "name": "split-consensus-viewer-block",
      "type": "registry:block",
      "title": "Split Consensus",
      "description": "A split result with multi-run consensus visible in the sidebar: the page rail stays beside output-level likelihoods and each vote used to build the final split.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/label",
        "@retab/switch",
        "@retab/segment-legend",
        "@retab/segment-page-rail",
        "@retab/use-segment-interaction"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/split-consensus-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-viewer-block.tsx"
        },
        {
          "path": "components/viewers/lib/partition-types.ts",
          "type": "registry:component",
          "target": "@components/viewers/lib/partition-types.ts"
        },
        {
          "path": "components/viewers/lib/split-types.ts",
          "type": "registry:component",
          "target": "@components/viewers/lib/split-types.ts"
        },
        {
          "path": "components/viewers/split/split-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/split/split-viewer.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-model.ts",
          "type": "registry:ui",
          "target": "@ui/segmented-document-model.ts"
        },
        {
          "path": "registry/new-york-v4/ui/segmented-document-provider.tsx",
          "type": "registry:ui",
          "target": "@ui/segmented-document-provider.tsx"
        },
        {
          "path": "registry/new-york-v4/ui/use-segment-viewport-controller.ts",
          "type": "registry:ui",
          "target": "@ui/use-segment-viewport-controller.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "split-consensus-diagram-horizontal-viewer-block",
      "type": "registry:block",
      "title": "Split Consensus Diagram Horizontal",
      "description": "A split consensus segment diagram with consolidation, five raw votes, and contested-page density in a wide horizontal sidebar beside the PDF.",
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/segment-legend",
        "@retab/page-ribbon",
        "@retab/use-segment-interaction"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/split-consensus-diagram-horizontal-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-diagram-horizontal-viewer-block.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/split-consensus-segment-diagram.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-segment-diagram.tsx"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "split-consensus-diagram-vertical-viewer-block",
      "type": "registry:block",
      "title": "Split Consensus Diagram Vertical",
      "description": "A split consensus segment diagram with the page axis running vertically for a narrow sidebar beside the PDF.",
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/segment-legend",
        "@retab/page-ribbon",
        "@retab/use-segment-interaction"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/split-consensus-diagram-vertical-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-diagram-vertical-viewer-block.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/split-consensus-segment-diagram.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-segment-diagram.tsx"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "split-consensus-lukas-viewer-block",
      "type": "registry:block",
      "title": "Split Consensus Lukas",
      "description": "The split benchmark diagram from Lukas Bjorkland's article, with GT, Split v1, Split v2, the PDF pane, and the same dark metrics table treatment.",
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer",
        "@retab/use-keyed-layout-effect",
        "@retab/effect-key"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/split-consensus-lukas-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-lukas-viewer-block.tsx"
        },
        {
          "path": "registry/new-york-v4/blocks/split-consensus-lukas-data.ts",
          "type": "registry:component",
          "target": "@components/blocks/split-consensus-lukas-data.ts"
        },
        {
          "path": "app/api/politax-pdf/[prefix]/[document]/route.ts",
          "type": "registry:file",
          "target": "app/api/politax-pdf/[prefix]/[document]/route.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    },
    {
      "name": "classify-consensus-viewer-block",
      "type": "registry:block",
      "title": "Classify Consensus",
      "description": "A classification result with consensus visible in the sidebar: selected category, likelihood, and every vote beside the source document.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "@retab/file-viewer",
        "@retab/pdf-viewer"
      ],
      "files": [
        {
          "path": "registry/new-york-v4/blocks/classify-consensus-viewer-block.tsx",
          "type": "registry:component",
          "target": "@components/blocks/classify-consensus-viewer-block.tsx"
        },
        {
          "path": "components/viewers/classify/classify-consensus-block.tsx",
          "type": "registry:component",
          "target": "@components/viewers/classify/classify-consensus-block.tsx"
        },
        {
          "path": "components/viewers/classify/classifier-viewer.tsx",
          "type": "registry:component",
          "target": "@components/viewers/classify/classifier-viewer.tsx"
        },
        {
          "path": "components/viewers/lib/classify-types.ts",
          "type": "registry:component",
          "target": "@components/viewers/lib/classify-types.ts"
        }
      ],
      "categories": [
        "primitives"
      ]
    }
  ]
}
