diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
| commit | 3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch) | |
| tree | 57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/hooks/use-keybindings.ts | |
| parent | 729d10592f4e802f91c555c309ff3ba4b119f843 (diff) | |
| download | opencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz | |
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/hooks/use-keybindings.ts')
| -rw-r--r-- | apps/web/src/hooks/use-keybindings.ts | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/apps/web/src/hooks/use-keybindings.ts b/apps/web/src/hooks/use-keybindings.ts deleted file mode 100644 index 0c524214..00000000 --- a/apps/web/src/hooks/use-keybindings.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { useEffect } from "react"; -import { invokeAction } from "@/lib/actions"; -import { useEditor } from "@/hooks/use-editor"; -import { useKeybindingsStore } from "@/stores/keybindings-store"; -import { isTypableDOMElement } from "@/utils/browser"; - -/** - * a composable that hooks to the caller component's - * lifecycle and hooks to the keyboard events to fire - * the appropriate actions based on keybindings - */ -export function useKeybindingsListener() { - const editor = useEditor(); - const { - keybindings, - getKeybindingString, - overlayDepth, - isLoadingProject, - isRecording, - } = useKeybindingsStore(); - - useEffect(() => { - const eventOptions: AddEventListenerOptions = { capture: true }; - const handleKeyDown = (ev: KeyboardEvent) => { - const normalizedKey = (ev.key ?? "").toLowerCase(); - - if (overlayDepth > 0 || isLoadingProject || isRecording) { - return; - } - - const binding = getKeybindingString(ev); - const activeElement = document.activeElement; - const isTextInput = - activeElement instanceof HTMLElement && - isTypableDOMElement({ element: activeElement }); - const boundAction = binding ? keybindings[binding] : undefined; - - if (normalizedKey === "escape" && isTextInput) { - activeElement.blur(); - return; - } - - if (!binding) return; - if (!boundAction) return; - - if (isTextInput) return; - if (boundAction === "paste-copied") { - if (!editor.clipboard.hasEntry()) return; - ev.preventDefault(); - invokeAction("paste-copied", undefined, "keypress"); - return; - } - - ev.preventDefault(); - - switch (boundAction) { - case "seek-forward": - invokeAction("seek-forward", { seconds: 1 }, "keypress"); - break; - case "seek-backward": - invokeAction("seek-backward", { seconds: 1 }, "keypress"); - break; - case "jump-forward": - invokeAction("jump-forward", { seconds: 5 }, "keypress"); - break; - case "jump-backward": - invokeAction("jump-backward", { seconds: 5 }, "keypress"); - break; - default: - invokeAction(boundAction, undefined, "keypress"); - } - }; - - document.addEventListener("keydown", handleKeyDown, eventOptions); - - return () => { - document.removeEventListener("keydown", handleKeyDown, eventOptions); - }; - }, [ - keybindings, - getKeybindingString, - overlayDepth, - isLoadingProject, - isRecording, - editor, - ]); -} |
