// src/hooks/useHotkeys.ts
import { onCleanup, onMount } from 'solid-js';
import { closePanel, openPanel, togglePaused, triggerRespawn, uiState } from '~/stores/uiStore';
const TYPING_TAGS = new Set(['INPUT', 'TEXTAREA']);
function isTyping(target: EventTarget | null): boolean {
if (!(target instanceof HTMLElement)) return false;
if (TYPING_TAGS.has(target.tagName)) return true;
if (target.isContentEditable) return true;
return false;
}
export function useHotkeys(): void {
const handler = (e: KeyboardEvent) => {
if (isTyping(e.target)) return;
if (e.ctrlKey || e.metaKey || e.altKey) return;
switch (e.key.toLowerCase()) {
case 'l':
openPanel(uiState.panel === 'library' ? 'none' : 'library');
e.preventDefault();
break;
case 'e':
openPanel(uiState.panel === 'editor' ? 'none' : 'editor');
e.preventDefault();
break;
case 'c':
openPanel(uiState.panel === 'cinema' ? 'none' : 'cinema');
e.preventDefault();
break;
case 'r':
triggerRespawn();
e.preventDefault();
break;
case ' ':
togglePaused();
e.preventDefault();
break;
case 'escape':
closePanel();
e.preventDefault();
break;
}
};
onMount(() => window.addEventListener('keydown', handler));
onCleanup(() => window.removeEventListener('keydown', handler));
}