From 4572572c94af7150e8c8f8404dd7328b9808aaec Mon Sep 17 00:00:00 2001
From: Marcel
Date: Tue, 9 Jun 2026 16:47:30 +0200
Subject: [PATCH] fix(journey-editor): clear liveAnnounce 500ms after move;
document svelte-ignore suppressions
NVDA+Chrome and VoiceOver+Safari can re-announce a persistent non-empty
aria-live region when adjacent DOM mutations occur. Clearing with a
500ms delay gives the announcement time to fire once before going quiet.
The two svelte-ignore a11y_no_static_element_interactions suppressions are
given preceding comments explaining the keyboard accessibility contract so
they are not mistaken for unaddressed tech debt.
Co-Authored-By: Claude Sonnet 4.6
---
frontend/src/lib/geschichte/JourneyEditor.svelte | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/frontend/src/lib/geschichte/JourneyEditor.svelte b/frontend/src/lib/geschichte/JourneyEditor.svelte
index 458520b4..a0a4da72 100644
--- a/frontend/src/lib/geschichte/JourneyEditor.svelte
+++ b/frontend/src/lib/geschichte/JourneyEditor.svelte
@@ -155,6 +155,10 @@ async function handleMoveUp(index: number) {
newPosition: index
});
await handleReorder(ids);
+ // Clear so the live region does not re-announce on unrelated DOM mutations
+ setTimeout(() => {
+ liveAnnounce = '';
+ }, 500);
}
async function handleMoveDown(index: number) {
@@ -167,6 +171,10 @@ async function handleMoveDown(index: number) {
newPosition: index + 2
});
await handleReorder(ids);
+ // Clear so the live region does not re-announce on unrelated DOM mutations
+ setTimeout(() => {
+ liveAnnounce = '';
+ }, 500);
}
async function save(nextStatus: 'DRAFT' | 'PUBLISHED') {
@@ -237,6 +245,7 @@ async function save(nextStatus: 'DRAFT' | 'PUBLISHED') {
{/if}
+
{m.journey_empty_state()}
{/if}
{#each items as item, i (item.id)}
+