@thibault.sh/hooks
Version:
A comprehensive collection of React hooks for browser storage, UI interactions, and more
1 lines • 2.14 kB
Source Map (JSON)
{"version":3,"sources":["../src/hooks/useKeyCombo.ts"],"names":["useKeyCombo","targetCombo","pressedKeys","setPressedKeys","useState","useEffect","handleKeyDown","event","prev","handleKeyUp","next","key"],"mappings":"wCASO,SAASA,CAAAA,CAAYC,EAAgC,CAC1D,GAAM,CAACC,CAAaC,CAAAA,CAAc,EAAIC,cAAsB,CAAA,IAAI,GAAK,CAErE,CAAA,OAAAC,gBAAU,IAAM,CACd,IAAMC,CAAiBC,CAAAA,CAAAA,EAAyB,CAC9CJ,CAAgBK,CAAAA,CAAAA,EAAS,IAAI,GAAI,CAAA,CAAC,GAAGA,CAAMD,CAAAA,CAAAA,CAAM,GAAG,CAAC,CAAC,EACxD,CAEME,CAAAA,CAAAA,CAAeF,GAAyB,CAC5CJ,CAAAA,CAAgBK,CAAS,EAAA,CACvB,IAAME,CAAAA,CAAO,IAAI,GAAIF,CAAAA,CAAI,EACzB,OAAAE,CAAAA,CAAK,OAAOH,CAAM,CAAA,GAAG,EACdG,CACT,CAAC,EACH,CAEA,CAAA,OAAA,MAAA,CAAO,iBAAiB,SAAWJ,CAAAA,CAAa,EAChD,MAAO,CAAA,gBAAA,CAAiB,OAASG,CAAAA,CAAW,CAErC,CAAA,IAAM,CACX,MAAO,CAAA,mBAAA,CAAoB,UAAWH,CAAa,CAAA,CACnD,OAAO,mBAAoB,CAAA,OAAA,CAASG,CAAW,EACjD,CACF,EAAG,EAAE,EAEER,CAAY,CAAA,KAAA,CAAOU,GAAQT,CAAY,CAAA,GAAA,CAAIS,CAAG,CAAC,CACxD","file":"useKeyCombo.cjs","sourcesContent":["import { useEffect, useState } from \"react\";\n\ntype KeyCombo = string[];\n\n/**\n * Hook that detects when a specific combination of keys is pressed\n * @param targetCombo - Array of keys that make up the combination (e.g., [\"Control\", \"Shift\", \"a\"])\n * @returns boolean indicating if the combination is currently active\n */\nexport function useKeyCombo(targetCombo: KeyCombo): boolean {\n const [pressedKeys, setPressedKeys] = useState<Set<string>>(new Set());\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n setPressedKeys((prev) => new Set([...prev, event.key]));\n };\n\n const handleKeyUp = (event: KeyboardEvent) => {\n setPressedKeys((prev) => {\n const next = new Set(prev);\n next.delete(event.key);\n return next;\n });\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"keyup\", handleKeyUp);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n\n return targetCombo.every((key) => pressedKeys.has(key));\n}\n"]}