summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/use-shift-key.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/hooks/use-shift-key.ts')
-rw-r--r--apps/web/src/hooks/use-shift-key.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/apps/web/src/hooks/use-shift-key.ts b/apps/web/src/hooks/use-shift-key.ts
new file mode 100644
index 00000000..4f9fe67c
--- /dev/null
+++ b/apps/web/src/hooks/use-shift-key.ts
@@ -0,0 +1,35 @@
+import { useEffect, useRef, type RefObject } from "react";
+
+export function useShiftKey(): RefObject<boolean> {
+ const isShiftHeldRef = useRef(false);
+
+ useEffect(() => {
+ const handleKeyDown = ({ key }: KeyboardEvent) => {
+ if (key === "Shift") {
+ isShiftHeldRef.current = true;
+ }
+ };
+
+ const handleKeyUp = ({ key }: KeyboardEvent) => {
+ if (key === "Shift") {
+ isShiftHeldRef.current = false;
+ }
+ };
+
+ const handleBlur = () => {
+ isShiftHeldRef.current = false;
+ };
+
+ document.addEventListener("keydown", handleKeyDown);
+ document.addEventListener("keyup", handleKeyUp);
+ window.addEventListener("blur", handleBlur);
+
+ return () => {
+ document.removeEventListener("keydown", handleKeyDown);
+ document.removeEventListener("keyup", handleKeyUp);
+ window.removeEventListener("blur", handleBlur);
+ };
+ }, []);
+
+ return isShiftHeldRef;
+}