diff --git a/frontend/src/lib/geschichte/StoryDocumentPanel.svelte b/frontend/src/lib/geschichte/StoryDocumentPanel.svelte index d1fb448e..fc1f9b20 100644 --- a/frontend/src/lib/geschichte/StoryDocumentPanel.svelte +++ b/frontend/src/lib/geschichte/StoryDocumentPanel.svelte @@ -29,6 +29,10 @@ let liveAnnounce = $state(''); let announceTimer: ReturnType | null = null; let sectionEl: HTMLElement | null = $state(null); +$effect(() => () => { + if (announceTimer) clearTimeout(announceTimer); +}); + const alreadyAddedIds = $derived( new Set(items.filter((i) => i.document).map((i) => i.document!.id)) ); @@ -86,7 +90,9 @@ async function moveFocusAfterRemove(removedIdx: number) { return; } const target = items[Math.max(removedIdx - 1, 0)]; - sectionEl?.querySelector(`[data-item-id="${target.id}"] [data-remove-btn]`)?.focus(); + sectionEl + ?.querySelector(`[data-item-id="${CSS.escape(target.id)}"] [data-remove-btn]`) + ?.focus(); } /** Optimistic removal with snapshot-and-rollback. */ @@ -142,8 +148,22 @@ async function handleRemove(item: JourneyItemView) { {#if errorMessage} {/if}