feat(transcription): swap plain textarea for PersonMentionEditor and thread mentionedPersons through autosave

- TranscriptionBlockData now carries mentionedPersons (matches backend
  schema added in PR-A).
- useBlockAutoSave.saveFn signature widens to (blockId, text, mentions);
  pendingMentions is tracked alongside pendingTexts and is preserved on
  failure so a retry resends the in-flight payload (B12).
- TranscriptionBlock.svelte renders <PersonMentionEditor>, exposing the
  textarea node back through a captureTextarea callback so the existing
  quote-selection feature still works.
- saveBlock in routes/documents/[id]/+page.svelte forwards mentions on
  PUT.
- flushOnUnload sends mentions in the keepalive payload too.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-29 00:32:09 +02:00
parent c4ee2c666b
commit 02d3e2ab61
11 changed files with 207 additions and 78 deletions

View File

@@ -12,7 +12,10 @@ const blocks: TranscriptionBlockData[] = [
text: 'First paragraph text.',
label: null,
sortOrder: 1,
version: 1
version: 1,
source: 'MANUAL',
reviewed: false,
mentionedPersons: []
},
{
id: 'b2',
@@ -49,7 +52,10 @@ describe('TranscriptionReadView', () => {
text: 'Text before [unleserlich] text after',
label: null,
sortOrder: 1,
version: 1
version: 1,
source: 'MANUAL',
reviewed: false,
mentionedPersons: []
}
],
onParagraphClick: () => {}
@@ -71,7 +77,10 @@ describe('TranscriptionReadView', () => {
text: 'Some [...] text',
label: null,
sortOrder: 1,
version: 1
version: 1,
source: 'MANUAL',
reviewed: false,
mentionedPersons: []
}
],
onParagraphClick: () => {}