mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
41 lines
1 KiB
TypeScript
41 lines
1 KiB
TypeScript
|
|
import { useState, useEffect } from 'react';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook to track whether the shift key is currently being held down
|
||
|
|
* @returns boolean indicating if shift key is pressed
|
||
|
|
*/
|
||
|
|
export default function useShiftKey(): boolean {
|
||
|
|
const [isShiftHeld, setIsShiftHeld] = useState(false);
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
const handleKeyDown = (e: KeyboardEvent) => {
|
||
|
|
if (e.key === 'Shift') {
|
||
|
|
setIsShiftHeld(true);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const handleKeyUp = (e: KeyboardEvent) => {
|
||
|
|
if (e.key === 'Shift') {
|
||
|
|
setIsShiftHeld(false);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
// Reset shift state when window loses focus
|
||
|
|
const handleBlur = () => {
|
||
|
|
setIsShiftHeld(false);
|
||
|
|
};
|
||
|
|
|
||
|
|
window.addEventListener('keydown', handleKeyDown);
|
||
|
|
window.addEventListener('keyup', handleKeyUp);
|
||
|
|
window.addEventListener('blur', handleBlur);
|
||
|
|
|
||
|
|
return () => {
|
||
|
|
window.removeEventListener('keydown', handleKeyDown);
|
||
|
|
window.removeEventListener('keyup', handleKeyUp);
|
||
|
|
window.removeEventListener('blur', handleBlur);
|
||
|
|
};
|
||
|
|
}, []);
|
||
|
|
|
||
|
|
return isShiftHeld;
|
||
|
|
}
|