{"version":3,"file":"index.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\n\nfunction useEvent<\n  T extends Window = Window,\n  K extends keyof WindowEventMap = keyof WindowEventMap\n>(\n  target: Window | null,\n  type: K,\n  listener: WindowEventListener<K>,\n  cleanup?: (...args: any[]) => void\n): void\nfunction useEvent<\n  T extends Document = Document,\n  K extends keyof DocumentEventMap = keyof DocumentEventMap\n>(\n  target: Document | null,\n  type: K,\n  listener: DocumentEventListener<K>,\n  cleanup?: (...args: any[]) => void\n): void\nfunction useEvent<\n  T extends HTMLElement = HTMLElement,\n  K extends keyof HTMLElementEventMap = keyof HTMLElementEventMap\n>(\n  target: React.RefObject<T> | T | null,\n  type: K,\n  listener: ElementEventListener<K>,\n  cleanup?: (...args: any[]) => void\n): void\nfunction useEvent(target: any, type: any, listener: any, cleanup: any): void {\n  const storedListener = React.useRef(listener)\n  const storedCleanup = React.useRef(cleanup)\n\n  React.useEffect(() => {\n    storedListener.current = listener\n    storedCleanup.current = cleanup\n  })\n\n  React.useEffect(() => {\n    const targetEl = target && 'current' in target ? target.current : target\n    if (!targetEl) return\n\n    let didUnsubscribe = 0\n    function listener(this: any, ...args: any[]) {\n      if (didUnsubscribe) return\n      storedListener.current.apply(this, args)\n    }\n\n    targetEl.addEventListener(type, listener)\n    const cleanup = storedCleanup.current\n\n    return () => {\n      didUnsubscribe = 1\n      targetEl.removeEventListener(type, listener)\n      cleanup && cleanup()\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [target, type])\n}\n\nexport type ElementEventListener<\n  K extends keyof HTMLElementEventMap = keyof HTMLElementEventMap\n> = (this: HTMLElement, ev: HTMLElementEventMap[K]) => any\n\nexport type DocumentEventListener<\n  K extends keyof DocumentEventMap = keyof DocumentEventMap\n> = (this: Document, ev: DocumentEventMap[K]) => any\n\nexport type WindowEventListener<\n  K extends keyof WindowEventMap = keyof WindowEventMap\n> = (this: Document, ev: WindowEventMap[K]) => any\n\nexport default useEvent\n"],"names":["target","type","listener","cleanup","storedListener","React","storedCleanup","current","didUnsubscribe","args","apply","this","targetEl","addEventListener","removeEventListener"],"mappings":"6DA6BA,SAAkBA,EAAaC,EAAWC,EAAeC,OACjDC,EAAiBC,EAAaH,GAC9BI,EAAgBD,EAAaF,GAEnCE,EAAgB,KACdD,EAAeG,QAAUL,EACzBI,EAAcC,QAAUJ,IAG1BE,EAAgB,cAKLH,QACHM,8BAD0BC,2BAAAA,kBAE9BL,EAAeG,QAAQG,MAAMC,KAAMF,QAN/BG,EAAWZ,GAAU,YAAaA,EAASA,EAAOO,QAAUP,KAC7DY,OAEDJ,EAAiB,EAMrBI,EAASC,iBAAiBZ,EAAMC,OAC1BC,EAAUG,EAAcC,cAEvB,KACLC,EAAiB,EACjBI,EAASE,oBAAoBb,EAAMC,GACnCC,GAAWA,OAGZ,CAACH,EAAQC"}