{"version":3,"file":"useOutsideClick.mjs","sources":["../../../packages/hooks/useOutsideClick.ts"],"sourcesContent":["import { RefObject, useCallback, useEffect, useRef } from 'react'\n\nexport const useOutsideClick = <T extends HTMLDivElement>(\n  callback?: () => void,\n): {\n  ref: RefObject<T>\n} => {\n  const ref = useRef<T>(null)\n\n  const handleOutsideClick = useCallback(\n    (event: MouseEvent) => {\n      const popover = ref.current\n      const { target } = event\n\n      if (!(target instanceof Element)) return\n\n      const isOutside = popover?.contains(target) === false\n      if (isOutside) callback?.()\n    },\n    [callback],\n  )\n\n  useEffect(() => {\n    document.addEventListener('mousedown', handleOutsideClick)\n\n    return () => document.removeEventListener('mousedown', handleOutsideClick)\n  }, [handleOutsideClick])\n\n  return { ref }\n}\n"],"names":["useOutsideClick","callback","ref","useRef","handleOutsideClick","useCallback","event","popover","current","target","Element","isOutside","contains","useEffect","document","addEventListener","removeEventListener"],"mappings":";;AAEaA,MAAAA,eAAe,GAC1BC,QAAqB,IAGlB;AACH,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAAI,IAAI,CAAC,CAAA;AAE3B,EAAA,MAAMC,kBAAkB,GAAGC,WAAW,CACnCC,KAAiB,IAAK;AACrB,IAAA,MAAMC,OAAO,GAAGL,GAAG,CAACM,OAAO,CAAA;IAC3B,MAAM;AAAEC,MAAAA,MAAAA;AAAO,KAAC,GAAGH,KAAK,CAAA;AAExB,IAAA,IAAI,EAAEG,MAAM,YAAYC,OAAO,CAAC,EAAE,OAAA;IAElC,MAAMC,SAAS,GAAGJ,OAAO,EAAEK,QAAQ,CAACH,MAAM,CAAC,KAAK,KAAK,CAAA;AACrD,IAAA,IAAIE,SAAS,EAAEV,QAAQ,IAAI,CAAA;AAC7B,GAAC,EACD,CAACA,QAAQ,CACX,CAAC,CAAA;AAEDY,EAAAA,SAAS,CAAC,MAAM;AACdC,IAAAA,QAAQ,CAACC,gBAAgB,CAAC,WAAW,EAAEX,kBAAkB,CAAC,CAAA;IAE1D,OAAO,MAAMU,QAAQ,CAACE,mBAAmB,CAAC,WAAW,EAAEZ,kBAAkB,CAAC,CAAA;AAC5E,GAAC,EAAE,CAACA,kBAAkB,CAAC,CAAC,CAAA;EAExB,OAAO;AAAEF,IAAAA,GAAAA;GAAK,CAAA;AAChB;;;;"}