{"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;AACA,KAAI,MAAM,kBAAkB,aAAa;AACvC,MAAI,yBACF,QAAO,CAAC,aAAa,SAAS,MAAM,OAAO,QAAQ;AAGrD,SAAO,CAAC,MAAM,OAAO,qBAAqB,CAAC,aAAa,SAAS,MAAM,OAAO,QAAQ;;AAGxF,QAAO;;AAGT,SAAgB,WACd,SACA,eAAyB;CAAC;CAAS;CAAY;CAAS,EACxD,2BAA2B,OAC3B;CACA,MAAM,gBAAgB,gBAAgB,UAAyB;AAC7D,UAAQ,SACL,CAAC,QAAQ,SAAS,UAAU;GAAE,gBAAgB;GAAM,iBAAiB;GAAO,MAAM;AACjF,OACE,iBAAiB,QAAQ,QAAQ,gBAAgB,CAAC,MAAM,IACxD,gBAAgB,OAAO,cAAc,yBAAyB,EAC9D;AACA,QAAI,QAAQ,eACV,OAAM,gBAAgB;AAGxB,YAAQ,MAAM;;IAGnB;GACD;AAEF,iBAAgB;AACd,WAAS,gBAAgB,iBAAiB,WAAW,cAAc;AACnE,eAAa,SAAS,gBAAgB,oBAAoB,WAAW,cAAc;IAClF,EAAE,CAAC"}