From 8dc9243add16685af68f1786a4d1f9926e02d1b4 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 12 Apr 2026 22:02:56 +0200 Subject: [PATCH] feat(frontend): wire OCR trigger + review toggle into transcription panel - OcrTrigger component rendered in the transcription empty state when the document has a file and user has write permission - Review checkmark toggle on each TranscriptionBlock (turquoise when reviewed, muted outline when not). Calls PUT .../review to toggle. - TranscriptionBlockData type: added source + reviewed fields - +page.svelte: triggerOcr() and reviewToggle() functions wired up - Paraglide translations (de/en/es) for review toggle + reviewed count All 687 frontend tests pass. Refs #226, #230 Co-Authored-By: Claude Sonnet 4.6 --- frontend/messages/de.json | 5 ++- frontend/messages/en.json | 5 ++- frontend/messages/es.json | 5 ++- .../lib/components/TranscriptionBlock.svelte | 27 ++++++++++++++ .../components/TranscriptionEditView.svelte | 36 ++++++++++++++++--- frontend/src/lib/types.ts | 2 ++ .../src/routes/documents/[id]/+page.svelte | 29 +++++++++++++++ 7 files changed, 102 insertions(+), 7 deletions(-) diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 886c468a..3eac5fd0 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -520,5 +520,8 @@ "ocr_error_heading": "OCR fehlgeschlagen", "ocr_error_retry": "Erneut versuchen", "ocr_batch_running": "OCR läuft · {processed} von {total} Dokumente abgeschlossen", - "ocr_batch_done": "OCR abgeschlossen · {processed} erfolgreich · {errors} fehlgeschlagen" + "ocr_batch_done": "OCR abgeschlossen · {processed} erfolgreich · {errors} fehlgeschlagen", + "transcription_block_review": "Als geprüft markieren", + "transcription_block_unreview": "Markierung aufheben", + "transcription_reviewed_count": "{reviewed} von {total} geprüft" } diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 86777394..9853b3d7 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -520,5 +520,8 @@ "ocr_error_heading": "OCR failed", "ocr_error_retry": "Try again", "ocr_batch_running": "OCR running · {processed} of {total} documents complete", - "ocr_batch_done": "OCR complete · {processed} successful · {errors} failed" + "ocr_batch_done": "OCR complete · {processed} successful · {errors} failed", + "transcription_block_review": "Mark as reviewed", + "transcription_block_unreview": "Unmark as reviewed", + "transcription_reviewed_count": "{reviewed} of {total} reviewed" } diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 6764392c..9062c2ed 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -520,5 +520,8 @@ "ocr_error_heading": "OCR fallido", "ocr_error_retry": "Intentar de nuevo", "ocr_batch_running": "OCR en curso · {processed} de {total} documentos completados", - "ocr_batch_done": "OCR completado · {processed} exitosos · {errors} fallidos" + "ocr_batch_done": "OCR completado · {processed} exitosos · {errors} fallidos", + "transcription_block_review": "Marcar como revisado", + "transcription_block_unreview": "Desmarcar como revisado", + "transcription_reviewed_count": "{reviewed} de {total} revisados" } diff --git a/frontend/src/lib/components/TranscriptionBlock.svelte b/frontend/src/lib/components/TranscriptionBlock.svelte index ce15ff66..41598b15 100644 --- a/frontend/src/lib/components/TranscriptionBlock.svelte +++ b/frontend/src/lib/components/TranscriptionBlock.svelte @@ -14,6 +14,7 @@ type Props = { text: string; label: string | null; active: boolean; + reviewed: boolean; saveState: SaveState; canComment: boolean; currentUserId: string | null; @@ -21,6 +22,7 @@ type Props = { onFocus: () => void; onDeleteClick: () => void; onRetry: () => void; + onReviewToggle: () => void; onMoveUp?: () => void; onMoveDown?: () => void; isFirst?: boolean; @@ -34,6 +36,7 @@ let { text, label = null, active, + reviewed, saveState, canComment, currentUserId, @@ -41,6 +44,7 @@ let { onFocus, onDeleteClick, onRetry, + onReviewToggle, onMoveUp, onMoveDown, isFirst = false, @@ -239,6 +243,29 @@ function handleTextareaMouseUp() { {/if} + + +