'use client' import { useEffect, useState } from 'react' import type { DeskewResult, DewarpResult, DewarpGroundTruth } from '@/app/(admin)/ai/ocr-kombi/types' import { DewarpSummaryBanner } from './DewarpSummaryBanner' import { DewarpFineTunePanel } from './DewarpFineTunePanel' import { DewarpGroundTruthPanel } from './DewarpGroundTruthPanel' interface DewarpControlsProps { dewarpResult: DewarpResult | null deskewResult?: DeskewResult | null showGrid: boolean onToggleGrid: () => void onManualDewarp: (shearDegrees: number) => void onCombinedAdjust?: (rotationDegrees: number, shearDegrees: number) => void onGroundTruth: (gt: DewarpGroundTruth) => void onNext: () => void isApplying: boolean } export function DewarpControls({ dewarpResult, deskewResult, showGrid, onToggleGrid, onManualDewarp, onCombinedAdjust, onGroundTruth, onNext, isApplying, }: DewarpControlsProps) { const [manualShear, setManualShear] = useState(0) const [gtSaved, setGtSaved] = useState(false) const [showFineTune, setShowFineTune] = useState(false) // Initialize slider to auto-detected value when result arrives useEffect(() => { if (dewarpResult && dewarpResult.shear_degrees !== undefined) { setManualShear(dewarpResult.shear_degrees) } }, [dewarpResult?.shear_degrees]) return (
{/* Summary banner */} {dewarpResult && ( )} {/* Manual shear angle slider */} {dewarpResult && (
Scherwinkel (manuell)
-2.0{'\u00B0'} setManualShear(parseInt(e.target.value) / 100)} className="flex-1 h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700 accent-teal-500" /> +2.0{'\u00B0'} {manualShear.toFixed(2)}{'\u00B0'}

Scherung der vertikalen Achse in Grad. Positiv = Spalten nach rechts kippen, negativ = nach links.

)} {/* Fine-tuning panel */} {dewarpResult && onCombinedAdjust && ( setShowFineTune(v => !v)} onCombinedAdjust={onCombinedAdjust} onGroundTruth={onGroundTruth} isApplying={isApplying} gtSaved={gtSaved} onGtSaved={() => setGtSaved(true)} /> )} {/* Ground Truth */} {dewarpResult && !showFineTune && ( setGtSaved(true)} /> )} {/* Next button */} {dewarpResult && (
)}
) }