Zum Inhalt

src/hooks/useHotkeys.ts

// 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));
}