{"version":3,"sources":["../../src/use-key-status/index.ts"],"sourcesContent":["import { useKeyDown } from '../use-key-down'\nimport { useKeyUp } from '../use-key-up'\nimport { useLatest } from '../use-latest'\nimport { useSafeState } from '../use-safe-state'\n\nimport type { KeyFilter, UseKeyStrokeHandler, UseKeyStrokeOptions } from '../use-key-stroke'\n\nexport interface UseKeyStatusHandler extends UseKeyStrokeHandler {}\nexport interface UseKeyStatusOptions extends Omit<UseKeyStrokeOptions, 'eventName' | 'dedupe'> {}\n\n/**\n * A React Hook that helps to track the press status of a key.\n */\nexport function useKeyStatus(\n  key?: KeyFilter,\n  handler?: UseKeyStatusHandler,\n  options: UseKeyStatusOptions = {},\n): boolean {\n  const [isPressed, setPressed] = useSafeState(false)\n  const latest = useLatest({ handler })\n\n  useKeyDown(\n    key,\n    (e) => {\n      setPressed(true)\n      latest.current.handler?.(e)\n    },\n    { ...options, dedupe: true },\n  )\n\n  useKeyUp(\n    key,\n    (e) => {\n      setPressed(false)\n      latest.current.handler?.(e)\n    },\n    { ...options, dedupe: true },\n  )\n\n  return isPressed\n}\n"],"names":["useKeyStatus","key","handler","options","useSafeState","isPressed","setPressed","latest","useLatest","useKeyDown","e","current","dedupe","useKeyUp"],"mappings":";;;;+BAagBA;;;eAAAA;;;0BAbW;wBACF;yBACC;4BACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUtB,SAASA,aACdC,GAAe,EACfC,OAA6B;QAC7BC,UAAAA,iEAA+B,CAAC;IAEhC,IAAgCC,iCAAAA,IAAAA,0BAAY,EAAC,YAAtCC,YAAyBD,kBAAdE,aAAcF;IAChC,IAAMG,SAASC,IAAAA,oBAAS,EAAC;QAAEN,SAAAA;IAAQ;IAEnCO,IAAAA,sBAAU,EACRR,KACA,SAACS;YAECH,yBAAAA;QADAD,WAAW;SACXC,0BAAAA,CAAAA,kBAAAA,OAAOI,OAAO,EAACT,OAAO,cAAtBK,8CAAAA,6BAAAA,iBAAyBG;IAC3B,GACA,wCAAKP;QAASS,QAAQ;;IAGxBC,IAAAA,kBAAQ,EACNZ,KACA,SAACS;YAECH,yBAAAA;QADAD,WAAW;SACXC,0BAAAA,CAAAA,kBAAAA,OAAOI,OAAO,EAACT,OAAO,cAAtBK,8CAAAA,6BAAAA,iBAAyBG;IAC3B,GACA,wCAAKP;QAASS,QAAQ;;IAGxB,OAAOP;AACT"}