'use client' import { useCallback, useRef } from 'react' import type { StructureBox, StructureGraphic } from '@/app/(admin)/ai/ocr-kombi/types' import type { EditableCell } from './StepReconstructionTypes' import { colTypeColor } from './StepReconstructionTypes' import { StructureLayer } from './StructureLayer' interface ReconstructionSimpleViewProps { cells: EditableCell[] dewarpedUrl: string zoom: number imageNaturalSize: { w: number; h: number } | null imageNaturalH: number emptyCellIds: Set showEmptyHighlight: boolean structureBoxes: StructureBox[] structureGraphics: StructureGraphic[] showStructure: boolean onTextChange: (cellId: string, newText: string) => void onKeyDown: (e: React.KeyboardEvent, cellId: string) => void onResetCell: (cellId: string) => void onImageLoad: () => void getDisplayText: (cell: EditableCell) => string isEdited: (cell: EditableCell) => boolean imageRef: React.RefObject } export function ReconstructionSimpleView({ cells, dewarpedUrl, zoom, imageNaturalSize, imageNaturalH, emptyCellIds, showEmptyHighlight, structureBoxes, structureGraphics, showStructure, onTextChange, onKeyDown, onResetCell, onImageLoad, getDisplayText, isEdited, imageRef, }: ReconstructionSimpleViewProps) { const containerRef = useRef(null) // Font size based on image natural height (not container) scaled by zoom const getFontSize = useCallback((bboxH: number): number => { const baseH = imageNaturalH || 800 const px = (bboxH / 100) * baseH * 0.55 return Math.max(8, Math.min(18, px * (zoom / 100))) }, [imageNaturalH, zoom]) return (
{/* Background image at reduced opacity */} {/* eslint-disable-next-line @next/next/no-img-element */} Dewarped {/* Structure elements (boxes, graphics) */} {imageNaturalSize && ( )} {/* Empty field markers */} {showEmptyHighlight && cells .filter(c => emptyCellIds.has(c.cellId)) .map(cell => (
))} {/* Editable text fields at bbox positions */} {cells.map((cell) => { const displayText = getDisplayText(cell) const edited = isEdited(cell) return (
onTextChange(cell.cellId, e.target.value)} onKeyDown={(e) => onKeyDown(e, cell.cellId)} className={`w-full h-full bg-transparent text-black dark:text-white border px-0.5 outline-none transition-colors ${ colTypeColor(cell.colType) } ${edited ? 'border-green-500 bg-green-50/30 dark:bg-green-900/20' : ''}`} style={{ fontSize: `${getFontSize(cell.bboxPct.h)}px`, lineHeight: '1', }} title={`${cell.cellId} (${cell.colType})`} /> {/* Per-cell reset button (X) — only shown for edited cells on hover */} {edited && ( )}
) })}
) }