fix(web): useShortcuts — бэр-клавиши не зависят от Shift
Some checks are pending
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions

'?' на US-раскладке вводится через Shift+/, поэтому при нажатии e.shiftKey=true.
Старая логика требовала wantShift === e.shiftKey и блокировала '?' (wantShift=false).
Теперь для одиночных клавиш (без '+' в spec) сравниваем только e.key — это правильно
и для '/', и для '?', и для 'n', и не ломает 'mod+s'.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-30 11:47:09 +05:00
parent 76cbe78257
commit c2ebbcc1bd

View file

@ -40,6 +40,14 @@ const matches = (e: KeyboardEvent, spec: string): boolean => {
const wantShift = parts.includes('shift') const wantShift = parts.includes('shift')
const wantAlt = parts.includes('alt') const wantAlt = parts.includes('alt')
const key = parts[parts.length - 1] const key = parts[parts.length - 1]
const isBare = parts.length === 1
// Бэр-ключи ('?', '/', 'n', 'Escape') — не зависим от модификаторов:
// некоторые символы требуют shift на ряде раскладок ('?'), и мы хотим
// чтобы ловилось при любом состоянии. Esc сам не использует модификаторы.
if (isBare) {
return e.key.toLowerCase() === key
}
const ctrlOrMeta = e.ctrlKey || e.metaKey const ctrlOrMeta = e.ctrlKey || e.metaKey
if (wantMod !== ctrlOrMeta) return false if (wantMod !== ctrlOrMeta) return false