From 60795126a5a274e1f97e0179aa00508146fbfa2c Mon Sep 17 00:00:00 2001 From: kristianwind Date: Thu, 8 Oct 2026 07:04:27 +0200 Subject: [PATCH] fix(opgaver): skuffens knapper kan ikke tabbes til, mens den er usynlig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `inert` på skuffen, når den er lukket, så dens felt og knapper er ude af tabrækkefølgen og ude af tilgængelighedstræet. Det støder mod funktionen selv: et inert element kan ikke fokuseres, og fokus i samme hug som klikket er præcis det, iOS kræver for at åbne tastaturet. Attributten sættes reaktivt af `inert={!open}`, og Sveltes opdateringer er asynkrone, så den er der stadig i det øjeblik handleren kører. Derfor fjernes den med hånden i `start()`, før fokus sættes, og den reaktive binding lægger den tilbage ved lukning. En imperativ DOM-ændring midt i en deklarativ komponent ser ud som sjusk, og uden en grund skrevet ved siden af ville den næste læser helt rimeligt rydde den op. Plantet ved at fjerne linjen: prøven går rød med "markøren skal stå i skuffens felt efter trykket — Expected: true, Received: false". Linjen bærer noget. Luk-knappens `tabindex` er fjernet som overflødig; inert dækker hele træet. Co-Authored-By: Claude Opus 5 --- web/src/lib/components/DictateSheet.svelte | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/src/lib/components/DictateSheet.svelte b/web/src/lib/components/DictateSheet.svelte index 333a473..58ce0aa 100644 --- a/web/src/lib/components/DictateSheet.svelte +++ b/web/src/lib/components/DictateSheet.svelte @@ -40,6 +40,15 @@ * og uden pointer-events frem for skjult. */ function start() { + // `inert` fjernes med hånden her, og det er ikke sjusk. Attributten sættes + // reaktivt af `inert={!open}` nedenfor, så den er der stadig i det øjeblik, + // klikket kører — Sveltes opdateringer er asynkrone. Og et inert element kan + // ikke fokuseres, så `focusField()` ville ramme ingenting, og iOS ville ikke + // åbne tastaturet. + // + // Den findes, fordi alternativet er værre: uden den kan skuffens knapper + // tabbes til, mens den er usynlig, på hver eneste side. + sheet?.removeAttribute('inert'); open = true; box?.focusField(); } @@ -81,7 +90,6 @@ class:open aria-hidden="true" onclick={close} - onkeydown={null} role="presentation" > @@ -93,13 +101,14 @@ aria-modal="false" aria-label={t('task.speak')} aria-hidden={!open} + inert={!open} >

{t('task.speakHint')}

- +