{"version":3,"file":"use-event-listener.es.mjs","sources":["../../src/hooks/use-event-listener.ts"],"sourcesContent":["// Dependencies\nimport * as React from 'react';\n\nexport const getRefElement = <T>(\n  element?: React.RefObject<Element> | T\n): Element | T | undefined | null | React.RefObject<Element> => {\n  if (element && typeof element === 'object' && 'current' in element) {\n    return element.current;\n  }\n\n  return element;\n};\n\nconst isSsr = !(typeof window !== 'undefined' && window.document?.createElement);\n\ntype UseEventListenerProps = {\n  type: keyof WindowEventMap;\n  listener: EventListener;\n  element?: React.RefObject<Element> | HTMLElement | Document | Window | null;\n  options?: AddEventListenerOptions;\n};\n\nfunction useEventListener({ type, listener, element = isSsr ? undefined : window, options }: UseEventListenerProps) {\n  const savedListener = React.useRef<EventListener>();\n\n  React.useEffect(() => {\n    savedListener.current = listener;\n  }, [listener]);\n\n  const handleEventListener = React.useCallback((event: Event) => {\n    savedListener.current?.(event);\n  }, []);\n\n  React.useEffect(() => {\n    const target = getRefElement(element) as unknown as Element;\n\n    target?.addEventListener(type, handleEventListener, options);\n\n    return () => target?.removeEventListener(type, handleEventListener);\n  }, [type, element, options, handleEventListener]);\n}\n\nexport { useEventListener };\nexport type { UseEventListenerProps };\n"],"names":["getRefElement","element","isSsr","useEventListener","type","listener","options","savedListener","React","handleEventListener","event","target"],"mappings":";AAGa,MAAAA,IAAgB,CAC3BC,MAEIA,KAAW,OAAOA,KAAY,YAAY,aAAaA,IAClDA,EAAQ,UAGVA,GAGHC,IAAQ,EAAE,OAAO,SAAW,OAAe,OAAO,UAAU;AASlE,SAASC,EAAiB,EAAE,MAAAC,GAAM,UAAAC,GAAU,SAAAJ,IAAUC,IAAQ,SAAY,QAAQ,SAAAI,KAAkC;AAC5G,QAAAC,IAAgBC,EAAM;AAE5B,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAAD,EAAc,UAAUF;AAAA,EAAA,GACvB,CAACA,CAAQ,CAAC;AAEb,QAAMI,IAAsBD,EAAM,YAAY,CAACE,MAAiB;AAC9D,IAAAH,EAAc,UAAUG,CAAK;AAAA,EAC/B,GAAG,CAAE,CAAA;AAEL,EAAAF,EAAM,UAAU,MAAM;AACd,UAAAG,IAASX,EAAcC,CAAO;AAE5B,WAAAU,GAAA,iBAAiBP,GAAMK,GAAqBH,CAAO,GAEpD,MAAMK,GAAQ,oBAAoBP,GAAMK,CAAmB;AAAA,KACjE,CAACL,GAAMH,GAASK,GAASG,CAAmB,CAAC;AAClD;"}