{"version":3,"file":"use-hotkeys.mjs","names":[],"sources":["../../src/use-hotkeys/use-hotkeys.ts"],"sourcesContent":["import { useEffect, useEffectEvent } from 'react';\nimport { getHotkeyHandler, getHotkeyMatcher, HotkeyItemOptions } from './parse-hotkey';\n\nexport type { HotkeyItemOptions };\nexport { getHotkeyHandler };\n\nexport type HotkeyItem = [string, (event: KeyboardEvent) => void, HotkeyItemOptions?];\n\nfunction shouldFireEvent(\n  event: KeyboardEvent,\n  tagsToIgnore: string[],\n  triggerOnContentEditable = false\n) {\n  if (event.target instanceof HTMLElement) {\n    if (triggerOnContentEditable) {\n      return !tagsToIgnore.includes(event.target.tagName);\n    }\n\n    return !event.target.isContentEditable && !tagsToIgnore.includes(event.target.tagName);\n  }\n\n  return true;\n}\n\nexport function useHotkeys(\n  hotkeys: HotkeyItem[],\n  tagsToIgnore: string[] = ['INPUT', 'TEXTAREA', 'SELECT'],\n  triggerOnContentEditable = false\n) {\n  const handleKeydown = useEffectEvent((event: KeyboardEvent) => {\n    hotkeys.forEach(\n      ([hotkey, handler, options = { preventDefault: true, usePhysicalKeys: false }]) => {\n        if (\n          getHotkeyMatcher(hotkey, options.usePhysicalKeys)(event) &&\n          shouldFireEvent(event, tagsToIgnore, triggerOnContentEditable)\n        ) {\n          if (options.preventDefault) {\n            event.preventDefault();\n          }\n\n          handler(event);\n        }\n      }\n    );\n  });\n\n  useEffect(() => {\n    document.documentElement.addEventListener('keydown', handleKeydown);\n    return () => document.documentElement.removeEventListener('keydown', handleKeydown);\n  }, []);\n}\n\nexport namespace useHotkeys {\n  export type Hotkey = HotkeyItem;\n}\n"],"mappings":";;;;AAQA,SAAS,gBACP,OACA,cACA,2BAA2B,OAC3B;CACA,IAAI,MAAM,kBAAkB,aAAa;EACvC,IAAI,0BACF,OAAO,CAAC,aAAa,SAAS,MAAM,OAAO,OAAO;EAGpD,OAAO,CAAC,MAAM,OAAO,qBAAqB,CAAC,aAAa,SAAS,MAAM,OAAO,OAAO;CACvF;CAEA,OAAO;AACT;AAEA,SAAgB,WACd,SACA,eAAyB;CAAC;CAAS;CAAY;AAAQ,GACvD,2BAA2B,OAC3B;CACA,MAAM,gBAAgB,gBAAgB,UAAyB;EAC7D,QAAQ,SACL,CAAC,QAAQ,SAAS,UAAU;GAAE,gBAAgB;GAAM,iBAAiB;EAAM,OAAO;GACjF,IACE,iBAAiB,QAAQ,QAAQ,eAAe,EAAE,KAAK,KACvD,gBAAgB,OAAO,cAAc,wBAAwB,GAC7D;IACA,IAAI,QAAQ,gBACV,MAAM,eAAe;IAGvB,QAAQ,KAAK;GACf;EACF,CACF;CACF,CAAC;CAED,gBAAgB;EACd,SAAS,gBAAgB,iBAAiB,WAAW,aAAa;EAClE,aAAa,SAAS,gBAAgB,oBAAoB,WAAW,aAAa;CACpF,GAAG,CAAC,CAAC;AACP"}