# Keyboard Shortcuts Implementation for DocumentView.vue ## Changes Required ### 1. Add ref to search input (line ~49) ```vue placeholder="Search in document..." placeholder="Search in document... (Cmd/Ctrl+F)" ``` ### 3. Add searchInputRef declaration (after line ~406) ```javascript // Use hysteresis to prevent flickering at threshold const COLLAPSE_THRESHOLD = 120 // Collapse when scrolling down past 120px const EXPAND_THRESHOLD = 80 // Expand when scrolling up past 80px // ADD THIS: // Search input ref for keyboard shortcuts const searchInputRef = ref(null) // Computed property for selected image URL const selectedImageUrl = computed(() => { ``` ### 4. Add keyboard shortcut handler function (before onMounted, around line 1083) ```javascript // Keyboard shortcut handlers (Apple Preview-style) function handleKeyboardShortcuts(event) { const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0 const cmdOrCtrl = isMac ? event.metaKey : event.ctrlKey const isInputFocused = document.activeElement === searchInputRef.value // Cmd/Ctrl + F - Focus search box if (cmdOrCtrl && event.key === 'f') { event.preventDefault() if (searchInputRef.value) { searchInputRef.value.focus() searchInputRef.value.select() } return } // Escape - Clear search and blur input if (event.key === 'Escape') { if (searchQuery.value || isInputFocused) { event.preventDefault() clearSearch() if (isInputFocused && searchInputRef.value) { searchInputRef.value.blur() } jumpListOpen.value = false } return } // Enter or Cmd/Ctrl + G - Next result if (event.key === 'Enter' && !isInputFocused) { if (totalHits.value > 0) { event.preventDefault() nextHit() } return } if (cmdOrCtrl && event.key === 'g' && !event.shiftKey) { if (totalHits.value > 0) { event.preventDefault() nextHit() } return } // Shift + Enter or Cmd/Ctrl + Shift + G - Previous result if (event.key === 'Enter' && event.shiftKey && !isInputFocused) { if (totalHits.value > 0) { event.preventDefault() prevHit() } return } if (cmdOrCtrl && event.key === 'G' && event.shiftKey) { if (totalHits.value > 0) { event.preventDefault() prevHit() } return } // Cmd/Ctrl + Option/Alt + F - Toggle jump list (search sidebar toggle) if (cmdOrCtrl && event.altKey && event.key === 'f') { if (hitList.value.length > 0) { event.preventDefault() jumpListOpen.value = !jumpListOpen.value } return } } ``` ### 5. Register keyboard listener in onMounted (line ~1084) ```javascript onMounted(() => { loadDocument() // ADD THIS LINE: // Register global keyboard shortcut handler window.addEventListener('keydown', handleKeyboardShortcuts) // Handle deep links (#p=12) const hash = window.location.hash ``` ### 6. Clean up keyboard listener in onBeforeUnmount (find existing onBeforeUnmount cleanup at line ~949) ```javascript // Clean up listeners onBeforeUnmount(() => { if (rafId) { cancelAnimationFrame(rafId) } if (scrollTimeout) { clearTimeout(scrollTimeout) } window.removeEventListener('scroll', handleScroll) window.removeEventListener('hashchange', handleHashChange) // ADD THIS LINE: window.removeEventListener('keydown', handleKeyboardShortcuts) }) ``` ## Keyboard Shortcuts Summary | Shortcut | Action | |----------|--------| | `Cmd/Ctrl + F` | Focus search box and select all text | | `Enter` or `Cmd/Ctrl + G` | Go to next search result | | `Shift + Enter` or `Cmd/Ctrl + Shift + G` | Go to previous search result | | `Escape` | Clear search and close jump list | | `Cmd/Ctrl + Option/Alt + F` | Toggle jump list (search sidebar) | ## Features - **Cross-platform**: Automatically detects Mac (Cmd) vs Windows/Linux (Ctrl) - **Prevents default browser find**: Cmd/Ctrl+F won't open browser's find dialog - **Context-aware**: Enter key performs search when input is focused, navigates results otherwise - **Global shortcuts**: Work anywhere in the document view - **Apple Preview-style**: Matches familiar keyboard navigation patterns ## Testing 1. Open a document 2. Press Cmd/Ctrl+F - search box should focus 3. Type search query and press Enter 4. Press Cmd/Ctrl+G or Enter to cycle through results 5. Press Cmd/Ctrl+Shift+G or Shift+Enter to go backwards 6. Press Escape to clear search 7. With results visible, press Cmd/Ctrl+Option/Alt+F to toggle jump list