From c2ebbcc1bd621d2cf03d2660a6fb36e43b66ed3d Mon Sep 17 00:00:00 2001 From: nns Date: Sat, 30 May 2026 11:47:09 +0500 Subject: [PATCH] =?UTF-8?q?fix(web):=20useShortcuts=20=E2=80=94=20=D0=B1?= =?UTF-8?q?=D1=8D=D1=80-=D0=BA=D0=BB=D0=B0=D0=B2=D0=B8=D1=88=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D1=8F=D1=82=20?= =?UTF-8?q?=D0=BE=D1=82=20Shift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit '?' на US-раскладке вводится через Shift+/, поэтому при нажатии e.shiftKey=true. Старая логика требовала wantShift === e.shiftKey и блокировала '?' (wantShift=false). Теперь для одиночных клавиш (без '+' в spec) сравниваем только e.key — это правильно и для '/', и для '?', и для 'n', и не ломает 'mod+s'. Co-Authored-By: Claude Opus 4.7 --- src/food-market.web/src/lib/useShortcuts.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/food-market.web/src/lib/useShortcuts.ts b/src/food-market.web/src/lib/useShortcuts.ts index fd14a74..88eed5e 100644 --- a/src/food-market.web/src/lib/useShortcuts.ts +++ b/src/food-market.web/src/lib/useShortcuts.ts @@ -40,6 +40,14 @@ const matches = (e: KeyboardEvent, spec: string): boolean => { const wantShift = parts.includes('shift') const wantAlt = parts.includes('alt') 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 if (wantMod !== ctrlOrMeta) return false