{"version":3,"file":"react-use-keypress.cjs","sources":["../src/shimKeyboardEvent.js","../src/index.js"],"sourcesContent":["/**\n * Maps legacy or inconsistent `KeyboardEvent.key` values to modern standard values.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n */\nconst aliases = {\n  Win: \"Meta\",\n  Scroll: \"ScrollLock\",\n  Spacebar: \" \",\n  Down: \"ArrowDown\",\n  Left: \"ArrowLeft\",\n  Right: \"ArrowRight\",\n  Up: \"ArrowUp\",\n  Del: \"Delete\",\n  Crsel: \"CrSel\",\n  Exsel: \"ExSel\",\n  Apps: \"ContextMenu\",\n  Esc: \"Escape\",\n  Decimal: \".\",\n  Multiply: \"*\",\n  Add: \"+\",\n  Subtract: \"-\",\n  Divide: \"/\",\n};\n\n/**\n * Normalizes `KeyboardEvent.key` values across older browsers.\n * Mutates the `event.key` property in-place if an alias exists.\n * @param {KeyboardEvent} event - The event to normalize.\n */\nconst shimKeyboardEvent = (event) => {\n  const originalKey = event.key;\n  if (Object.hasOwn(aliases, originalKey)) {\n    const key = aliases[originalKey];\n    Object.defineProperty(event, \"key\", {\n      configurable: true,\n      enumerable: true,\n      get: () => key,\n    });\n  }\n};\n\nexport default shimKeyboardEvent;\n","import { useEffect, useRef } from \"react\";\nimport shimKeyboardEvent from \"./shimKeyboardEvent\";\n\n/**\n * Registers a global `keydown` listener and calls the provided handler\n * when matching keys are pressed.\n * @param {string|string[]} keys - Key or array of keys to listen for.\n * @param {(event: KeyboardEvent) => void} handler - Function called when a matching key is pressed.\n * @example\n * useKeypress(\"Escape\", handler);\n * useKeypress([\"ArrowUp\", \"ArrowDown\"], handler);\n */\nconst useKeypress = (keys, handler) => {\n  const callbackRef = useRef();\n\n  useEffect(() => {\n    callbackRef.current = (event) => {\n      shimKeyboardEvent(event);\n      if (Array.isArray(keys) ? keys.includes(event.key) : keys === event.key) {\n        handler?.(event);\n      }\n    };\n  }, [keys, handler]);\n\n  useEffect(() => {\n    const listener = (event) => callbackRef.current?.(event);\n    window.addEventListener(\"keydown\", listener);\n    return () => window.removeEventListener(\"keydown\", listener);\n  }, []);\n};\n\nexport default useKeypress;\n"],"names":["aliases","shimKeyboardEvent","event","originalKey","key","useKeypress","keys","handler","callbackRef","useRef","useEffect","listener"],"mappings":"sCAIMA,EAAU,CACd,IAAK,OACL,OAAQ,aACR,SAAU,IACV,KAAM,YACN,KAAM,YACN,MAAO,aACP,GAAI,UACJ,IAAK,SACL,MAAO,QACP,MAAO,QACP,KAAM,cACN,IAAK,SACL,QAAS,IACT,SAAU,IACV,IAAK,IACL,SAAU,IACV,OAAQ,GACV,EAOMC,EAAqBC,GAAU,CACnC,MAAMC,EAAcD,EAAM,IAC1B,GAAI,OAAO,OAAOF,EAASG,CAAW,EAAG,CACvC,MAAMC,EAAMJ,EAAQG,CAAW,EAC/B,OAAO,eAAeD,EAAO,MAAO,CAClC,aAAc,GACd,WAAY,GACZ,IAAK,IAAME,CACjB,CAAK,CACH,CACF,EC3BMC,EAAc,CAACC,EAAMC,IAAY,CACrC,MAAMC,EAAcC,EAAAA,OAAM,EAE1BC,EAAAA,UAAU,IAAM,CACdF,EAAY,QAAWN,GAAU,CAC/BD,EAAkBC,CAAK,GACnB,MAAM,QAAQI,CAAI,EAAIA,EAAK,SAASJ,EAAM,GAAG,EAAII,IAASJ,EAAM,MAClEK,IAAUL,CAAK,CAEnB,CACF,EAAG,CAACI,EAAMC,CAAO,CAAC,EAElBG,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAYT,GAAUM,EAAY,UAAUN,CAAK,EACvD,cAAO,iBAAiB,UAAWS,CAAQ,EACpC,IAAM,OAAO,oBAAoB,UAAWA,CAAQ,CAC7D,EAAG,CAAA,CAAE,CACP"}