{"version":3,"file":"use-click-outside.mjs","names":[],"sources":["../../src/use-click-outside/use-click-outside.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef } from 'react';\n\ntype EventType = MouseEvent | TouchEvent;\n\nconst DEFAULT_EVENTS = ['mousedown', 'touchstart'];\n\nexport function useClickOutside<T extends HTMLElement = any>(\n  callback: (event: EventType) => void,\n  events?: string[] | null,\n  nodes?: (HTMLElement | null)[]\n) {\n  const ref = useRef<T>(null);\n  const eventsList = events || DEFAULT_EVENTS;\n\n  const listener = useEffectEvent((event: Event) => {\n    const { target } = event ?? {};\n    if (Array.isArray(nodes)) {\n      const shouldIgnore =\n        !document.body.contains(target as Node) && (target as Element)?.tagName !== 'HTML';\n      const shouldTrigger = nodes.every((node) => !!node && !event.composedPath().includes(node));\n      shouldTrigger && !shouldIgnore && callback(event as EventType);\n    } else if (ref.current && !ref.current.contains(target as Node)) {\n      callback(event as EventType);\n    }\n  });\n\n  useEffect(() => {\n    eventsList.forEach((fn) => document.addEventListener(fn, listener));\n\n    return () => {\n      eventsList.forEach((fn) => document.removeEventListener(fn, listener));\n    };\n  }, []);\n\n  return ref;\n}\n"],"mappings":";;;AAIA,MAAM,iBAAiB,CAAC,aAAa,aAAa;AAElD,SAAgB,gBACd,UACA,QACA,OACA;CACA,MAAM,MAAM,OAAU,KAAK;CAC3B,MAAM,aAAa,UAAU;CAE7B,MAAM,WAAW,gBAAgB,UAAiB;EAChD,MAAM,EAAE,WAAW,SAAS,EAAE;AAC9B,MAAI,MAAM,QAAQ,MAAM,EAAE;GACxB,MAAM,eACJ,CAAC,SAAS,KAAK,SAAS,OAAe,IAAK,QAAoB,YAAY;AACxD,SAAM,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,SAAS,KAAK,CAAC,IAC1E,CAAC,gBAAgB,SAAS,MAAmB;aACrD,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,OAAe,CAC7D,UAAS,MAAmB;GAE9B;AAEF,iBAAgB;AACd,aAAW,SAAS,OAAO,SAAS,iBAAiB,IAAI,SAAS,CAAC;AAEnE,eAAa;AACX,cAAW,SAAS,OAAO,SAAS,oBAAoB,IAAI,SAAS,CAAC;;IAEvE,EAAE,CAAC;AAEN,QAAO"}