`useKeyHold` / `KeyStateTracker` latches a modifier forever when a `keyup` is swallowed without a `blur` (e.g. macOS Cmd+Shift+4)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 50/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- frontend
Direzione di ricerca
Inizia dal punto di ingresso useKeyHold e dal comportamento globale di KeyStateTracker, riproducendo il problema nel CodeSandbox collegato con Cmd+Shift+4 su macOS. Analizza come il tracker gestisce gli eventi keyup ignorati senza un window blur; il lavoro è completo quando useKeyHold('Shift') restituisce false dopo che la scorciatoia è stata annullata o completata senza richiedere un'altra pressione fisica di un tasto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
TanStack Hotkeys version
10.0.0
Framework/Library version
React v19.2.0
Describe the bug and the steps to reproduce it
useKeyHold('Shift') (and every consumer of the global KeyStateTracker) can get permanently stuck reporting a modifier as held. The tracker only learns a key was released from a discrete keyup event, and its only recovery path for a missed keyup is a window blur. Any OS-level interaction that swallows the keyup without blurring the browser window strands the held state indefinitely — every subsequent useKeyHold read returns true until the user physically taps and releases that key again.
Reproduction
- Render anything using
const shift = useKeyHold('Shift'). - On macOS, focus the page and press Cmd+Shift+4 (screenshot-to-selection).
- Press Esc to cancel (or take the shot).
- Observe
useKeyHold('Shift')is now stuck attrue, even though nothing is held.
Other triggers in the same class: Spotlight (Cmd+Space), Mission Control, and various OS shortcuts that consume a modifier keyup while leaving the browser window focused.
Your Minimal, Reproducible Example - (Sandbox Highly Recommended)
https://codesandbox.io/p/sandbox/stoic-fast-h5k2pr
Screenshots or Videos (Optional)
No response
Do you intend to try to help solve this bug with your own PR?
No, because I do not have time to dig into it
Terms & Code of Conduct
- I agree to follow this project's Code of Conduct
- I understand that if my bug cannot be reliable reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.
- Lingua principale
- TypeScript
- Stelle
- 729
- Fork
- 47
- Merge medio
- 18h 46m
- PR unite (30g)
- 9
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di TanStack/hotkeys
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
TanStack/hotkeys#105 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 56/100
TanStack/hotkeys#142 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
TanStack/hotkeys#138 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Dependency DashboardAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di TanStack/hotkeys
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
microsoft/vscode-livepreview#876 ·
I maintainer di solito rispondono entro 1 giorno
-
needs-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
JustJarethB/invoicer#54 ·
-
ICP 1.2.0 shows a scheduled task's interval in milliseconds under the label "Interval (In seconds)"ApertaNeeds Triage Type/Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
wso2/product-integrator#2585 ·
I maintainer di solito rispondono entro 1 giorno
-
Add: Telemundo West sdApertacheck:passed streams:add
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
design
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
MTES-MCT/monitor-field#119 ·
I maintainer di solito rispondono entro 1 giorno