import { useHotkeys } from 'react-hotkeys-hook'; import { useEditorStore } from '../stores/editorStore'; import { useAIStore } from '../stores/aiStore'; interface KeyboardShortcutsProps { onToggleCommandPalette: () => void; } export const useKeyboardShortcuts = ({ onToggleCommandPalette }: KeyboardShortcutsProps) => { const { saveCurrentFile, currentFile } = useEditorStore(); const { explainCode, refactorCode, fixCode } = useAIStore(); // Command palette useHotkeys('ctrl+k, cmd+k', (e) => { e.preventDefault(); onToggleCommandPalette(); }); // File operations useHotkeys('ctrl+s, cmd+s', (e) => { e.preventDefault(); saveCurrentFile(); }); // AI commands with selected text useHotkeys('ctrl+shift+e, cmd+shift+e', async (e) => { e.preventDefault(); if (currentFile) { const selectedText = getSelectedText(); if (selectedText) { await explainCode(selectedText, currentFile.language); } } }); useHotkeys('ctrl+shift+r, cmd+shift+r', async (e) => { e.preventDefault(); if (currentFile) { const selectedText = getSelectedText(); if (selectedText) { await refactorCode(selectedText, currentFile.language); } } }); useHotkeys('ctrl+shift+f, cmd+shift+f', async (e) => { e.preventDefault(); if (currentFile) { const selectedText = getSelectedText(); if (selectedText) { await fixCode(selectedText, currentFile.language); } } }); // Quick AI commands useHotkeys('alt+e', (e) => { e.preventDefault(); onToggleCommandPalette(); }); // Developer tools (only in development) useHotkeys('f12', (e) => { if (process.env.NODE_ENV === 'development') { e.preventDefault(); // Toggle developer tools if available } }); }; // Helper function to get selected text from Monaco editor const getSelectedText = (): string => { // This would integrate with Monaco editor's selection API // For now, return empty string as placeholder const selection = window.getSelection(); return selection ? selection.toString() : ''; };