{"version":3,"file":"use-event-listener.cjs","names":[],"sources":["../../src/use-event-listener/use-event-listener.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = any>(\n  type: K,\n  listener: (this: T, ev: HTMLElementEventMap[K]) => any,\n  options?: boolean | AddEventListenerOptions\n): React.RefCallback<T | null> {\n  const previousListener = useRef<Function | null>(null);\n  const previousNode = useRef<T | null>(null);\n\n  const callbackRef: React.RefCallback<T | null> = useCallback(\n    (node) => {\n      if (!node) {\n        return;\n      }\n\n      if (previousNode.current && previousListener.current) {\n        previousNode.current.removeEventListener(type, previousListener.current as any, options);\n      }\n\n      node.addEventListener(type, listener as any, options);\n      previousNode.current = node;\n      previousListener.current = listener;\n    },\n    [type, listener, options]\n  );\n\n  useEffect(\n    () => () => {\n      if (previousNode.current && previousListener.current) {\n        previousNode.current.removeEventListener(type, previousListener.current as any, options);\n      }\n    },\n    [type, options]\n  );\n\n  return callbackRef;\n}\n"],"mappings":";;;AAEA,SAAgB,iBACd,MACA,UACA,SAC6B;CAC7B,MAAM,oBAAA,GAAA,MAAA,QAA2C,IAAI;CACrD,MAAM,gBAAA,GAAA,MAAA,QAAgC,IAAI;CAE1C,MAAM,eAAA,GAAA,MAAA,cACH,SAAS;EACR,IAAI,CAAC,MACH;EAGF,IAAI,aAAa,WAAW,iBAAiB,SAC3C,aAAa,QAAQ,oBAAoB,MAAM,iBAAiB,SAAgB,OAAO;EAGzF,KAAK,iBAAiB,MAAM,UAAiB,OAAO;EACpD,aAAa,UAAU;EACvB,iBAAiB,UAAU;CAC7B,GACA;EAAC;EAAM;EAAU;CAAO,CAC1B;CAEA,CAAA,GAAA,MAAA,uBACc;EACV,IAAI,aAAa,WAAW,iBAAiB,SAC3C,aAAa,QAAQ,oBAAoB,MAAM,iBAAiB,SAAgB,OAAO;CAE3F,GACA,CAAC,MAAM,OAAO,CAChB;CAEA,OAAO;AACT"}