feat: initial app

This commit is contained in:
2026-05-10 03:06:54 +07:00
parent 23be44dbe0
commit d5b92cc9a4
95 changed files with 8104 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
import React from "react";
type UseEditorShortcutsOptions = {
onSave: () => void;
onCopy: () => void;
onCut: () => void;
onPaste: () => void;
onDelete: () => void;
};
export function useEditorShortcuts(options: UseEditorShortcutsOptions) {
const { onSave, onCopy, onCut, onPaste, onDelete } = options;
React.useEffect(() => {
function handleKeyDown(e: KeyboardEvent) {
if (e.ctrlKey || e.metaKey) {
if (e.key.toLowerCase() === "s") {
e.preventDefault();
onSave();
return;
}
if (e.key.toLowerCase() === "c") {
e.preventDefault();
onCopy();
return;
}
if (e.key.toLowerCase() === "x") {
e.preventDefault();
onCut();
return;
}
if (e.key.toLowerCase() === "v") {
e.preventDefault();
onPaste();
return;
}
}
if (e.key === "Delete" || e.key === "Backspace") {
if (!(e.target instanceof HTMLElement) || /^(input|textarea|select)$/i.test(e.target.tagName)) return;
e.preventDefault();
onDelete();
}
}
window.addEventListener("keydown", handleKeyDown);
return () => window.removeEventListener("keydown", handleKeyDown);
}, [onCopy, onCut, onDelete, onPaste, onSave]);
}