{"version":3,"sources":["../src/use-event-listeners.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from \"react\"\n\ninterface EventListeners {\n  add<K extends keyof DocumentEventMap>(\n    el: EventTarget,\n    type: K,\n    listener: (this: Document, ev: DocumentEventMap[K]) => any,\n    options?: boolean | AddEventListenerOptions,\n  ): void\n  add(\n    el: EventTarget,\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions,\n  ): void\n  remove<K extends keyof DocumentEventMap>(\n    el: EventTarget,\n    type: K,\n    listener: (this: Document, ev: DocumentEventMap[K]) => any,\n    options?: boolean | EventListenerOptions,\n  ): void\n  remove(\n    el: EventTarget,\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | EventListenerOptions,\n  ): void\n}\n\nexport function useEventListeners(): EventListeners {\n  const listeners = useRef(new Map())\n  const currentListeners = listeners.current\n\n  const add = useCallback((el: any, type: any, listener: any, options: any) => {\n    listeners.current.set(listener, { type, el, options })\n    el.addEventListener(type, listener, options)\n  }, [])\n\n  const remove = useCallback(\n    (el: any, type: any, listener: any, options: any) => {\n      el.removeEventListener(type, listener, options)\n      listeners.current.delete(listener)\n    },\n    [],\n  )\n\n  useEffect(\n    () => () => {\n      currentListeners.forEach((value, key) => {\n        remove(value.el, value.type, key, value.options)\n      })\n    },\n    [remove, currentListeners],\n  )\n\n  return { add, remove }\n}\n"],"mappings":";;;AAAA,SAAS,aAAa,WAAW,cAAc;AA6BxC,SAAS,oBAAoC;AAClD,QAAM,YAAY,OAAO,oBAAI,IAAI,CAAC;AAClC,QAAM,mBAAmB,UAAU;AAEnC,QAAM,MAAM,YAAY,CAAC,IAAS,MAAW,UAAe,YAAiB;AAC3E,cAAU,QAAQ,IAAI,UAAU,EAAE,MAAM,IAAI,QAAQ,CAAC;AACrD,OAAG,iBAAiB,MAAM,UAAU,OAAO;AAAA,EAC7C,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS;AAAA,IACb,CAAC,IAAS,MAAW,UAAe,YAAiB;AACnD,SAAG,oBAAoB,MAAM,UAAU,OAAO;AAC9C,gBAAU,QAAQ,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,CAAC;AAAA,EACH;AAEA;AAAA,IACE,MAAM,MAAM;AACV,uBAAiB,QAAQ,CAAC,OAAO,QAAQ;AACvC,eAAO,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM,OAAO;AAAA,MACjD,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ,gBAAgB;AAAA,EAC3B;AAEA,SAAO,EAAE,KAAK,OAAO;AACvB;","names":[]}