···4242function handleGlobalKeydown(e: KeyboardEvent) {
4343 if (isEditableElement(e.target)) return
44444545- if (e.key === '/') {
4545+ if (isKeyWithoutModifiers(e, '/')) {
4646 e.preventDefault()
47474848 // Try to find and focus search input on current page
···5858 router.push('/search')
5959 }
60606161- if (e.key === '?') {
6161+ if (isKeyWithoutModifiers(e, '?')) {
6262 e.preventDefault()
6363 showKbdHints.value = true
6464 }
+6-8
app/components/AppHeader.vue
···6262}
63636464onKeyStroke(
6565- ',',
6565+ e => isKeyWithoutModifiers(e, ',') && !isEditableElement(e.target),
6666 e => {
6767- if (isEditableElement(e.target)) return
6868-6967 e.preventDefault()
7068 navigateTo('/settings')
7169 },
···7371)
74727573onKeyStroke(
7676- 'c',
7777- e => {
7474+ e =>
7575+ isKeyWithoutModifiers(e, 'c') &&
7676+ !isEditableElement(e.target) &&
7877 // Allow more specific handlers to take precedence
7979- if (e.defaultPrevented) return
8080- if (isEditableElement(e.target)) return
8181-7878+ !e.defaultPrevented,
7979+ e => {
8280 e.preventDefault()
8381 navigateTo('/compare')
8482 },
+5-4
app/components/MobileMenu.vue
···2929watch(() => route.fullPath, closeMenu)
30303131// Close on escape
3232-onKeyStroke('Escape', () => {
3333- if (isOpen.value) {
3232+onKeyStroke(
3333+ e => isKeyWithoutModifiers(e, 'Escape') && isOpen.value,
3434+ e => {
3435 isOpen.value = false
3535- }
3636-})
3636+ },
3737+)
37383839// Prevent body scroll when menu is open
3940const isLocked = useScrollLock(document)